- 能够说出正则表达式的作用
- 能够写出简单的正则表达式
- 能够使用正则表达式对表单进行验证
- 能够使用正则表达式替换内容
正则表达式(Regular Expression)用于匹配字符串中字符组合的模式,在JS中,正则表达式也是对象
正则表达式通常被用于检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名只能输入英文字母、数组或下划线(匹配
)。此外,正则表达式还用于过滤页面中的敏感词(替换
),或从字符串中获取我们想要的特定部分(提取
)等
- 灵活性、逻辑性和功能性非常强
- 可以迅速用极简单的方式达到字符串的复杂控制
- 对于刚接触的人来说,比较晦涩难懂
- 实际开发中,我们一般直接复制写好的正则表达式,会根据现有的做一些小修改
在JS中,有两种创建正则的方式
var reg = new RegExp(/表达式/);
var reg = /表达式/;
表达式不需要加引号
,不论是字符串型还是数字型
test()
正则对象方法,用于检测字符串是否符合该规则,返回true或false,参数为检测的字符串
regxObj.test(str);
regxObj
:正则表达式str
:检测的字符串
一个正则表达式可以由简单的字符构成,例如/123/
,也可以是简单和特殊字符的组成,例如/ab*c/
。其中的特殊字符又称为元字符
,是正则中具有特殊意义的专用符号,例如^
、$
、+
等
特殊字符非常多,可以参考:
- MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
- jQuery手册:正则表达式部分
- 正则测试工具:http://tool.oschina.net/regex
正则表达式中的边界符(位置符)用于提示字符所处的位置
,主要有两个字符
边界符 | 说明 |
---|---|
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
var reg = /^abc$/; //精确匹配,要求必须是abc字符串才符合
console.log(reg.test("abc")); // true
console.log(reg.test("abcd")); // false
console.log(reg.test("aabc")); // false
字符类表示有一系列的字符可以选择,只需要匹配任意一个
都行了,所有可供选择的字符放在[]
内
var reg = /[abc]/; // abc匹配任意一个就行
var reg2 = /^[abc]$/; // 只有 a b c 这三个字符才会返回true
var reg = /^[a-z]$/; // 26个小写英文字母返回true
可以在正则中添加多个限定条件
var reg = /^[a-zA-Z0-9_-]$/; // 包括26个英文字母+数字+下划线+短横线
这个意思是取反
,表示除了[]里面的条件都是true
var reg = /^[^a-z]$/; // 除26个小写英文字母外都为true
前面的条件或者后面的条件满足任意1个
var reg = /^[a-z]|[A-Z]$/; // 小写字母或者大写字母均可
量词符用来设定某个模式出现的次数
量词 | 说明 |
---|---|
* | 重复0次或多次(>=0) |
+ | 重复1次或多次(>=1) |
? | 重复0次或1次(0 || 1) |
{n} | 重复n次(=n) |
{n, } | 重复n次或更多次(>=n) |
{n, m} | 重复n次到m次(n<= 次数 <=m) |
var reg1 = /^a*$/; // a出现的次数>=0
var reg2 = /^a+$/; // a出现的次数>=1
var reg3 = /^a?$/; // a出现的次数1或0
var reg4 = /^a{5}$/; // a出现的次数为5次
var reg5 = /^a{8,}$/; // a出现的次数>=8
var reg6 = /^a{4,6}$/; // 4<=a出现的次数<=6
大括号量词符
,表示重复次数。{4,6}
中括号字符集合
,匹配方括号的任意字符。[a-zA-Z]
小括号优先级
在线测试:https://c.runoob.com/front-end/854
预定义类指的是某些常见模式的简写模式
预定义类 | 说明 |
---|---|
\d | 匹配0-9之间的任一数字,相当于[0-9] |
\D | 匹配非0-9的字符,相当于[^0-9] |
\w | 匹配任意字母,数字和下划线,相当于[A-Za-z0-9_] |
\W | 匹配非字母、数字和下划线的字符,相当于[^A-Za-z0-9_] |
\s | 匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f] |
\S | 匹配非空格的字符,相当于[^\t\r\n\v\f] |
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
QQ号码:^[1-9][0-9]{4,}$
中文:^[\u4e00-\u9fa5]$
源码:JS文件
replace()
方法可以实现替换字符串的操作,用来替换的参数可以是一个字符串或者一个正则表达式。
stringObject.replace(regexp/substr, replacement)
- 第1个参数:被替换的字符串或者正则表达式
- 第2个参数:替换为的字符串
- 返回值是一个替换完毕的字符串
/表达式/[switch]
switch
也称为修饰符,按照什么样的格式去匹配,有三种值:
g
:全局匹配i
:忽略大小写gi
:全局匹配+忽略大小写
var reg = /[a-z]/gi;