RegExp对象
定义
字面量定义var re = /p1/p2;
该方式创建的正则对象,参数p1被两个正斜杠包裹,必选;参数p2位于第二个正斜杠后面;
注意:两个参数p1和p2都无需用双引号包裹。
构造函数 var regx = new RegExp();
该方式创建正则对象,构造函数可以接收两个参数p1和p2;p1表示匹配模式,必需;p2表示检索条件,可选;参数都是以双引号包裹的字符串,无需正斜杠包裹。
- 如果采用正则对象方式,RegExg接收的是字符串,\反斜杠是转义字符,
\d
会变成d,此时需要使用两个反斜杠,即\\d
来达到\d效果;但是在字面量方式中,不是字符串,所以使用一个反斜杠即可。 - 正则对象方式,可以接收参数,而正则字面量方式不可以。1var reg = new RegExp('\\bis\\b','g');//在js中`\`需要转义,所以会出现`\\`
修饰符与对象属性
/g
: global全文搜索,不添加的话搜索到第一个匹配停止/i
: ignore case 忽略大小写,默认大小写敏感/m
: multiple lines 多行搜索lastIndex
: 是当前表达式匹配内容的最后一个字符的下一个位置source
: 正则表达式的文本字符串
方法
text()
返回boolean,表示是否有匹配的字符串。如果有满足的字符串,则返回true,后保存lastIndex,并且在下一次匹配时从lastIndex开始。如果没有lastIndex设置为0
exec()
返回符合正则表达式的字符串结果数组。
非全局调用
返回数组。
第一个元素:与正则表达式匹配的文本
第二个元素:与分组(子表达式)匹配的文本,并以此类推
全局调用
返回数组:
- index 表明匹配文本的第一个字符位置
正则表达式
元字符
- 原义文本字符
- 元字符:在正则表达式中有特殊含义的非字母字符
*+?$^.|\(){}[]
范围类
字符类,或操作:[abc]
字符类,取反操作:[^abc]
范围类,闭区间,并且支持连写:[a-zA-Z]
在范围类中,如果-
前后没有被字符包围,则表示-
的含义
预定类
任意字符,除了回车符合换行符之外的所有字符:.
数字字符:\d
非数字字符:\D
空白符:\s
(space)
非空白符:\S
单词字符(字母、数字下划线):\w
非单词字符:\W
边界
开头:^
结尾:$
单词边界:\b
非单词边界:\B
量词
出现零次或一次:?
出现一次或者多次:+
出现零次或者多次:*
出现n次: {n}
出现n到m次: {n,m}
至少出现n次: {n,}
默认贪婪模式进行匹配;
非贪婪模式在量词后面加?
分组
分组:()
可以使内容作用于量词:/(\w\d){3}/g
或:|
把前后的内容分割开
反向引用,捕获分组内容(有分组的情况下):$1
忽略分组,不捕获,在分组内开头加上?:
前瞻
正则表达式从文本头部向尾部开始就解析,文本尾部方向,成为“前”。文本头部,成为“尾”
前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言。
正向前瞻
exp(?=assert)
负向前瞻
exp(?!assert)
收录一些常用的表达式
- 匹配时间戳:2017-07-2712var reg = new RegExp('([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))');reg.exec(date)[0];
2.