正则表达式测试(JavaScript 与 Go RE2)
用 JavaScript 引擎或 Go 的 RE2 引擎测试正则表达式,查看每一处匹配、每个捕获组以及替换结果。
两种引擎的语法速查表
| 写法 | 含义 | JavaScript | Go (RE2) |
|---|---|---|---|
. | 除换行符外的任意字符。使用 s 标志时也匹配换行符。 | 支持 | 支持 |
\d \w \s | 一个数字、一个单词字符、一个空白字符。大写的 \D、\W 和 \S 匹配相反的内容。 | 支持 | 支持 |
[abc] [^abc] [a-z] | 集合中的一个字符、不在集合中的一个字符、某个范围内的一个字符。 | 支持 | 支持 |
^ $ | 文本的开头和结尾。使用 m 标志时,匹配每一行的开头和结尾。 | 支持 | 支持 |
\b \B | 单词边界,以及不是单词边界的位置。 | 支持 | 支持 |
* + ? {2,5} | 零次或多次、一次或多次、零次或一次、2 到 5 次。每个量词都尽可能多地匹配。 | 支持 | 支持 |
*? +? ?? {2,5}? | 同样的量词,但尽可能少地匹配。 | 支持 | 支持 |
(…) (?:…) | 捕获组,以及只分组、不捕获的组。 | 支持 | 支持 |
(?<name>…) | 命名捕获组。Go 从 1.22 版起支持这种写法,所有版本都支持 (?P<name>…)。 | 支持 | 支持 |
a|b | a 或 b。 | 支持 | 支持 |
\p{L} \p{Lu} | Unicode 属性:任意字母、任意大写字母。JavaScript 需要 u 标志才能使用。 | 支持 | 支持 |
(?i) (?s) (?m) | 写在模式内部的标志。JavaScript 的标志设在模式外部。 | 不支持 | 支持 |
\A \z | 整个文本的开头和结尾,不受 m 标志影响。 | 不支持 | 支持 |
[[:alpha:]] | 集合内的 POSIX 字符类。 | 不支持 | 支持 |
(?=…) (?!…) | 先行断言:后面的内容必须匹配或必须不匹配,且不消耗字符。 | 支持 | 不支持 |
(?<=…) (?<!…) | 后行断言:前面的内容必须匹配或必须不匹配。 | 支持 | 不支持 |
\1 \k<name> | 反向引用:与前面某个分组所匹配的文本相同。 | 支持 | 不支持 |