| 锚点 |
|---|
| 匹配字符串开头的位置;带 m 标志时匹配行首。 | ^He → He |
| 匹配字符串结尾的位置;带 m 标志时匹配行尾。 | lo$ → lo |
| 匹配单词边界,即单词字符与非单词字符之间的位置。 | \bcat\b → cat |
| 匹配非单词边界,即两个单词字符之间或两个非单词字符之间的位置。 | \Bar → ar |
| 字符类 |
|---|
| 匹配除换行符外的任意单个字符,除非设置了 s 标志。 | a.c → abc |
| 匹配任意数字,0 到 9。 | \d → 7 |
| 匹配任意非数字字符。 | \D → a |
| 匹配任意单词字符:字母、数字或下划线。 | \w → _ |
| 匹配任意非单词字符。 | \W → ! |
| 匹配任意空白字符:空格、制表符或换行符。 | a\sb → a b |
| 匹配任意非空白字符。 | \S → a |
| 匹配方括号内列出的任意一个字符。 | [aeiou] → e |
| 匹配不在方括号列出范围内的任意字符。 | [^aeiou] → s |
| 匹配给定范围内的任意单个字符,从 a 到 z。 | [a-z] → m |
| 匹配包括换行符在内的任意单个字符,是让点号跨行的常用写法。 | [\s\S] → \n |
| 设置 u 标志时,匹配任意文字系统中的 Unicode 字母。 | \p{L} → é |
| 设置 u 标志时,匹配任意文字系统中的 Unicode 数字字符。 | \p{N} → ٣ |
| 转义:匹配单个换行符(line feed)。 | \n → line feed |
| 转义:匹配单个制表符。 | \t → tab |
| 转义:匹配单个回车符(carriage return)。 | \r → carriage return |
| 匹配由两位十六进制代码表示的单个字符。 | \x41 → A |
| 设置 u 标志时,匹配由给定十六进制码位表示的单个字符。 | \u{1F600} → 😀 |
| 类交集(需 v 标志):匹配同时属于两个集合的字符。 | [[a-z]&&[^aeiou]] → t |
| 量词 |
|---|
| 匹配前一个令牌零次或多次。 | ab* → abbb |
| 匹配前一个令牌一次或多次。 | a+ → aaa |
| 匹配前一个令牌零次或一次,使其成为可选。 | colou?r → color |
| 匹配前一个令牌恰好 n 次。 | a{3} → aaa |
| 匹配前一个令牌 n 次或更多。 | a{2,} → aaaa |
| 匹配前一个令牌 n 到 m 次(含边界)。 | a{2,4} → aaa |
| 懒惰量词:匹配前一个令牌零次或多次,尽可能少地匹配。 | <.*?> on <a><b> → <a> |
| 懒惰量词:匹配前一个令牌一次或多次,尽可能少地匹配。 | \d+? on 123 → 1 |
| 懒惰量词:匹配前一个令牌零次或一次,优先选择零次。 | ab?? on ab → a |
| 懒惰量词:匹配前一个令牌 n 到 m 次,尽可能少地匹配。 | a{1,3}? on aaa → a |
| 占有优先量词(PCRE):匹配前一个令牌零次或多次并保留结果,绝不回溯去尝试其他切分。 | .*+a on aaa → no match |
| 分组与交替 |
|---|
| 捕获组:匹配该序列并记住它,供反向引用使用。 | (ab)+ → abab |
| 非捕获组:匹配该序列但不记住它。 | (?:ab)+ → abab |
| 正向先行断言:接下来的字符是 abc 时匹配成功,但不消耗它们。 | a(?=b) → a |
| 负向先行断言:接下来的字符不是 abc 时匹配成功,但不消耗它们。 | a(?!b) → a |
| 反向引用:匹配捕获组 1 所捕获的确切文本。 | (a)\1 → aa |
| 交替:匹配竖线之前或之后的表达式。 | cat|dog → dog |
| 命名捕获组:匹配该序列并以给定名称记住它。 | (?<year>\d{4}) → year = 2026 |
| 正向后行断言:前面的字符是 abc 时匹配成功,但不消耗它们。 | (?<=a)b → b |
| 负向后行断言:前面的字符不是 abc 时匹配成功,但不消耗它们。 | (?<!a)b → b |
| 命名反向引用:匹配命名组所捕获的确切文本。 | (?<w>\w+) \k<w> → the the |
| 原子分组(PCRE):匹配该序列一次,之后绝不回溯进入其中。 | (?>a+)ab on aab → no match |
| 分支重置(PCRE):每个分支复用相同组编号的交替。 | (?|(cat)|(dog)) → \1 = dog |
| 标志 |
|---|
| 全局标志:查找字符串中的每一个匹配,而不只是第一个。 | /a/g on aaa → a, a, a |
| 忽略大小写标志:匹配时不区分字母大小写。 | /Hi/i → hi |
| 多行标志:把 ^ 和 $ 视为每一行的开头和结尾。 | /^a/m matches at the start of each line |
| dotall 标志:让点号也能匹配换行符。 | /a.b/s → a\nb |
| Unicode 标志:把模式和输入都当作 Unicode 码位处理。 | /\u{1F600}/u → 😀 |
| 粘性标志:只在 lastIndex 设定的确切位置上匹配。 | /ab/y matches only at lastIndex |
| indices 标志:把每个匹配的起止位置加入结果。 | /b/d on abc → indices [1, 2] |
| Unicode sets 标志:比 u 更严格,还允许在字符类内进行集合运算。 | /[a-z&&[^aeiou]]/v → t |
| 扩展标志(PCRE):忽略模式中未转义的空白和 # 注释。 | /a b/x → ab |