一、正则表达式语法
1、创建正则表达式的两种方法
① 字面量形式创建: var expression = /pattern/flags;
说明:模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。
每个正则表达式都可带有一或多个标志(flags),用以表明正则表达式的行为。g、i、m 分别用于指定全局模式、不区分大小写模式、多行模式。
② 构造函数创建:var expression = new RegExp("pattern","flags");
说明:传递给RegExp构造函数的两个参数都是字符串。在某些情况下要对模式参数进行转义。
2、元字符
正则表达式中的元字符包括: ( [ { \ ^ $ | ) ? * + . ] }
这些元字符在正则表达式中都有一或多种特殊用途,因此如果想要匹配字符串中包含的这些字符,就必须对它们进行转义。
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符。 |
red|blue|green | 查找任意指定的选项。 |
3、方括号
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找给定集合内的任意字符。 |
[^abc] | 查找给定集合外的任意字符。 |
[0-9] | 查找任意从 0 至 9 的数字。 |
[a-z] | 查找任意从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任意从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任意从大写 A 到小写 z 的字符。 |
4、转义字符
转义字符 | 描述 |
---|---|
\w | 查找单词字符(包括英文字母,数字,下划线)。 |
\W | 查找非单词字符(包括非英文字母,数字,下划线之外的字符)。 |
\d | 查找数字。 |
\D | 查找非数字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
\0 | 查找 NUL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
5、量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
n{X} | 匹配包含 X 个 n 的序列的字符串。 |
n{X,Y} | 匹配包含 X 或 Y 个 n 的序列的字符串。 |
n{X,} | 匹配包含至少 X 个 n 的序列的字符串。 |
n$ | 匹配任何结尾为 n 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
二、RegExp实例属性
1、global:布尔值,表示是否设置了g标志。
2、ignore:布尔值,表示是否设置了i标志。
3、lastIndex:证书,表示开始搜索下一个匹配项的字符位置,从0算起。
多用于在一个字符串中进行多次匹配。
4、multiline:布尔值,表示是否设置了m标志。
5、source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
三、RegExp实例方法
1、exec():接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。
语法:RegExpObject.exec(string)
说明:返回的数组包含两个额外的属性:index和input。其中,index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。返回的数组第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
在不设置全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息。
而在设置全局标志的情况下,每次调用exec()则都会在RegExpObject 的 lastIndex 属性指定的字符处开始查找新匹配项。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。
2、test():检索字符串中指定的值。返回 true 或 false。
语法:RegExpObject.test(string)
在不设置全局标志的情况下,lastIndex始终为0;
而在设置全局标志的情况下,lastIndex为上次匹配文本的最后一个字符的下一个位置。
3、compile(): 编译正则表达式。
compile 方法将正则表达式转换为内部的格式,从而执行得更快。例如,这允许在循环中更有效地使用正则表达式。当重复使用相同的表达式时,编译过的正则表达式使执行加速。