说明
正则表达式是用于进行文本匹配的工具,有可能字符串里有不止一个部分满足给定的正则表达式,这时每一个这样的部分被称为一个匹配
特殊代码
表1.常用的特殊代码 |
|
代码/语法 |
说明 |
. |
匹配除换行符以外的任意字符 |
w |
匹配字母或数字 |
s |
匹配任意的空白符 |
d |
匹配数字 |
匹配单词的开始或结束 |
|
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
字符转义:
重复:
表2.常用的量词 |
|
代码/语法 |
说明 |
* |
重复零次或更多次 |
+ |
重复一次或更多次 |
? |
重复零次或一次 |
{n} |
重复n次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n到m次 |
反义
表3.常用的反义代码 |
|
代码/语法 |
说明 |
W |
匹配任意不是字母和数字的字符 |
S |
匹配任意不是空白符的字符 |
D |
匹配任意非数字的字符 |
B |
匹配不是单词开头或结束的位置 |
[^x] |
匹配除了x以外的任意字符 |
[^aeiou] |
匹配除了aeiou这几个字母以外的任意字符 |
注意:^在中括号”[]”中被使用的话就是表示字符类的否定,如果不是的话就是表示限定开头
例如:^[a-z]表示的是以小写字母开始,[^a-z]表示匹配非小写字母
Tips:在正则表达式中有单行和多行模式
多行模式:Multiline修饰的是^与$,就是说Multiline为false的时候,^只能匹配字符串开头,$只能匹配字符串结尾,Multiline为true的时候,^可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符 之后的位置),$可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符 之前的位置),换句话说,匹配每一行
单行模式:(开启则“ . ”号会匹配所有字符,不开启则匹配除了换行符之外的所有字符)Singleline修饰的是'.',就是说Singleline为true的时候匹配的是所有字符(包括 ),Singleline为false的时候,匹配的是除 外的所有字符。
举个例子:(https://tool.lu/regex/ 在线工具)
这是一段测试字符串
1)正则表达式为.+
1.单行模式
2.多行模式
3.单行模式+多行模式 <==> Multiline=true Singleline=true 因为正则表达式中没有^$所以默认是整个字符串匹配所以只会有一个匹配结果(和单行匹配结果一致)
4.无模式 <==> Multiline=false Singleline=false 因为正则表达式中没有^$并且"."不能匹配 所以匹配三处"abab1 abca 123ac "(这个代表整个字符串)
2)正则表达式为^.+$
1.单行模式
"abab1 abca 123ac "
2.多行模式
"abab1
abca
123ac "(这个代表按行匹配)
3.单行模式+多行模式 <==> Multiline=trueSingleline=true 这就意味着'.'匹配换行,并且按行匹配
"abab1
abca
123ac "(这个代表按行匹配)
也许你会问这和上面有什么不同,那么我们把正则表达式换成[ab]{2}w+和^[ab]{2}w+$来试下单行模式+多行模式
[ab]{2}w+
其他几种情况结果都一样
^[ab]{2}$
原因:[ab]{2}w+没有^$没有'.',无论是单行模式还是多行模式,结果都是整个字符串去匹配[ab]{2}w+,^[ab]{2}$由于没有'.',无所谓单行模式,此时如果不是多行模式,那么是整个字符串去匹配,如果是多行模式,那么是逐行去匹配
4.无模式
如果觉得弄清楚的话自己可以看看a.*a、^a.*a$与样例中的匹配情况
JS中没有单行模式!!!!!!!!!!!只有三种对象模式:g (全文查找出现的所有 pattern), i (忽略大小写), m (多行查找)