JavaScript 正则测试

用浏览器里的 JavaScript 正则做测试,高亮匹配、列出捕获组,并可以试替换。

测的是浏览器里的 JavaScript 正则

这是 ECMAScript 的写法,前端校验和很多 JSON Schema 用的就是它,不是 PHP 的 PCRE。从 preg_match 文档抄来的式子,如果用了只有 PCRE 才有的写法,在这里会失败。当前浏览器支持后行断言。

全局匹配一直开着,所以你会看到全部命中,而不只是第一处。替换使用 JavaScript 的规则:$1、$2,两个 $$ 表示一个美元符号。

表达式已经确认可用、只想把匹配抠出来时,用更短的 正则提取。

怎么用

  1. 表达式不要加斜线。\d+ 就够了,不要写成 /\d+/g。标志用复选框。
  2. i 忽略大小写。m 让 ^ 和 $ 对每一行生效。s 让点号匹配换行。u 打开 Unicode,写 \p{L} 或处理表情时需要它。
  3. 命中会高亮,并列出位置和每个捕获组。这里的 ∅ 表示这一组没有参与匹配。
  4. 打开替换后,$1 是第一组。结果是整段文字替换之后的样子,不是只列出命中的碎片。
  5. 不合法时会显示浏览器给出的原因。常见的是括号没闭合,或末尾多了一个反斜线。

写法备忘

  • . 默认不匹配换行,除非打开 s。\d 数字,\w 单词字符,\s 空白。大写是相反集合。
  • + 一次或多次,* 零次或多次,? 可有可无。再加一个 ? 变成非贪婪,例如 +?。
  • (...) 会捕获。(?:...) 只分组、不捕获。页面上的编号从 1 开始,和 $1 一致。
  • 在 JavaScript 里,不开 u 时 \w 只是 [A-Za-z0-9_],不包含汉字和带音标的字母。

常见问题

编辑器里能用,这里不行。

先看方言。很多编辑器用 PCRE,\w 会包含重音字母。这里默认不包含。

会把标签页卡死吗?

像 (a+)+ 这种嵌套量词,遇到很长又匹配失败的文本会非常慢。页面在 5000 处命中后停止列举,但没法把这种表达式变快。把范围写窄一些。