直接量字符
字母和数字字符 |
自身 |
\o |
NUL字符(\u0000) |
\t |
制表符(\u0009) |
\n |
换行符(\u000A) |
\v |
垂直制表符(\u000B) |
\f |
换页符(\u000C) |
\r |
回车符(\u000D) |
\xnn |
由十六进制数nn指定的拉丁字符,例如,\x0A 等价于 \n |
\uxxxx |
由十六进制数xxxx指定的Unicode,例如,\u0009 等价于 \t |
\cX |
控制字符^X,例如,\cJ等价于换行符\n |
字符类
字符 |
匹配 |
[...] |
方括号内的任意字符 |
[^...] |
不在方括号内的任意字符 |
. |
除了换行符和其他Unicode行终止符之外的任意字符 |
\w |
任意ASCII字符组成的单词,等价于[a-zA-Z0-9] |
\W |
任意不是ASCII字符组成的单词,等价于[^a-zA-Z0-9] |
\s |
任何Unicode空白符 |
\S |
任何非Unicode空白符,注意\W 和\S不同 |
\d |
任何ASCII数字,等价于[0-9] |
\D |
除了ASCII数字之外的任何字符,等价于[^0-9] |
[\b] |
退格直接量(特例) |
重复
字符 |
含义 |
{n,m} |
匹配前一项至少n次,但是不能超过m次 |
{n,} |
匹配前一项至少n次或者更多次 |
{n} |
匹配前一项n次 |
? |
匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1} |
+ |
匹配前一项1次或多次,等价于{1,} |
* |
匹配前一项0次或多次,等价于{0,} |
举例
/\d{2,4}/ // 匹配2~4个数字
/\w{3}\d/ // 精确匹配三个字母和一个可选数字
/\s+java\s+/ // 匹配前后带有一个或多个空格的字符串 java
/[^(]*/ // 匹配一个或多个非左括号的字符
选择、分组和引用字符
字符 |
含义 |
丨 |
选择,匹配的是该符号左边的子表达式或右边的子表达式 |
(...) |
组合,将几个项组合为一个单元,这个单元可以通过 * + ? 丨 等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用 |
(?...) |
只组合,把项组合到一个单元,但是不记忆与该组合匹配的字符 |
\n |
和第n个分组第一次匹配的字符相匹配,组是圆括号中的字表达式(也可能是嵌套的),组索引是从左到右的左括号数 (?: 形式的分组不编码 |
锚字符
字符 |
含义 |
^ |
匹配字符串的开头,在多行检索中,匹配一行的开头 |
$ |
匹配字符串的结尾,在多行检索中,匹配一行的开头 |
\b |
匹配一个单词的边界,简言之,就是位于\w 和\W 之间的位置,或位于字符\w 和字符串的开头或者结尾之间的位置(但需要注意,[\b] 匹配的是退格符) |
\B |
匹配非单词边界的位置 |
(?=p) |
零宽正向先行断言,要求接下来的字符都与p 匹配,但是不能包括匹配p 的那些字符 |
(?!p) |
零宽负向先行断言,要求接下来的字符都与p 不匹配 |
修饰符
符号 |
含义 |
i |
执行不区分大小写 |
g |
执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止 |
m |
多行匹配模式, ^ 匹配一行的开头和字符串的开头,$ 匹配行的结束和字符串的结束 |