字符类别
字符 | 含义 | 例子 |
---|
. | 匹配任意单个字符,在字符集中,点( . )失去其特殊含义,并匹配一个字面点( . ) | |
\d | 等价于[0-9] | |
\D | 等价于[^0-9] | |
\w | 等价于[A-Za-z0-9_] | |
\W | 等价于 [^A-Za-z0-9_] | |
\s | 匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格 | |
\S | 匹配一个非空白符 | |
\t | 匹配一个水平制表符(tab) | |
\r | 匹配一个回车符(carriage return) | |
\n | 匹配一个换行符(linefeed) | |
\v | 匹配一个垂直制表符(vertical tab) | |
\f | 匹配一个换页符(form-feed) | |
[\b] | 匹配一个退格符(backspace)(不要与 \b 混淆) | |
\0 | 匹配一个 NUL 字符。不要在此后面跟小数点。 | |
\cX | X 是 A - Z 的一个字母。匹配字符串中的一个控制字符 | /\cM/ 匹配字符串中的 control-M |
\xhh | 匹配编码为 hh (两个十六进制数字)的字符 | |
\uhhhh | 匹配 Unicode 值为 hhhh (四个十六进制数字)的字符。 | |
字符集[]
模型 | 含义 | 例子 |
---|
[abc] | 匹配集合中任意一个字符 | |
[\^abc] | 对[xyz]进行取反 | |
注意:
1.abc
可以写成a-b
,所以26个字母可以简单写成a-z
.
2.123
可以写成1-3
,同理还有1-9
.
边界处理
模型 | 含义 | 例子 |
---|
^ | 从开始匹配 | ^A 不匹配 “an A” 中的 “A”,但匹配 “An A” 中的 “A” |
$ | 从结尾匹配 | t$ 不匹配 “eater” 中的 “t”,但匹配 “eat” 中的 “t” |
\b | | |
\B | | |
注意:
1.^
和$
组合起来使用可以匹配单个字母或单词
数量词
模型 | 含义 | 例子 |
---|
x* | 匹配前面的字母或者分组0次或多次 | bo* 匹配 “A ghost booooed” 中的 “boooo”;“A bird warbled” 中的 “b” |
x+ | 匹配前面的字母或者分组1次或多次 | bo+ 匹配"A ghost booooed" 中的 “boooo”;但不能匹配 “A bird warbled” 中的 “b” |
x? | 匹配前面的字母或者分组0次或1次 | |
x*? x+? | 非贪婪匹配 | |
x{n,m} | 匹配前面的字母或者分组n到m次 | |
x|y | 匹配 x 或 y | |
分组()
捕获
分组既是将括号里的内容看成一个整体.每个整体都可以用\1
,\2
等来引用.
例如:(a(bc))
中,有3个分组,\0
表示(a(bc))
,\1
也表示(a(bc))
,\2
表示(bc)
,排列顺序是从左到右第一个括号
模型 | 含义 | 例子 |
---|
(abc)+ | 将abc看成一个整体,1次或多次 | (abc)+匹配"abcab" |
(ab)\1 | 将ab看成一个整体,\1 指重复一次ab这个整体 | “(ab)\1"代表了"abab” |
(a(bc))\2 | 将bc看成一个整体,\1 指重复一次bc | “(a(bc))\2"代表了"abcbc” |
非捕获
(?)
分组里带有?
就表示分组是非捕获,既匹配的时候考虑括号里的内容,但是返回的时候不返回扩考里的内容.
模型 | 含义 | 例子 |
---|
x(?=y) | 只匹配后跟y的x | \d(?=a) 只匹配了"1a2b3c"中"a"前面的数字"1" |
x(?!y) | 只匹配后面不跟y的x | \d(?!a) 只匹配了"1a2b3c"中"b"前面的数字"2",“c"前面的"3” |
(?<=y)x | 只匹配前跟y的x | .(?<=1) 只匹配了"1a2b3c"中"1"后面的"a" |
(?<!y)x | 只匹配前不跟y的x | .(?<!1) 只匹配了"1a2b3c"中"2"后面的"b",“3"后面的"c” |
参考文献:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references
https://blog.csdn.net/okyoung188/article/details/53407021