用浏览器里的 JavaScript 正则做测试,高亮匹配、列出捕获组,并可以试替换。
这是 ECMAScript 的写法,前端校验和很多 JSON Schema 用的就是它,不是 PHP 的 PCRE。从 preg_match 文档抄来的式子,如果用了只有 PCRE 才有的写法,在这里会失败。当前浏览器支持后行断言。
全局匹配一直开着,所以你会看到全部命中,而不只是第一处。替换使用 JavaScript 的规则:$1、$2,两个 $$ 表示一个美元符号。
表达式已经确认可用、只想把匹配抠出来时,用更短的 正则提取。
\d+ 就够了,不要写成 /\d+/g。标志用复选框。^ 和 $ 对每一行生效。s 让点号匹配换行。u 打开 Unicode,写 \p{L} 或处理表情时需要它。$1 是第一组。结果是整段文字替换之后的样子,不是只列出命中的碎片。. 默认不匹配换行,除非打开 s。\d 数字,\w 单词字符,\s 空白。大写是相反集合。+ 一次或多次,* 零次或多次,? 可有可无。再加一个 ? 变成非贪婪,例如 +?。(...) 会捕获。(?:...) 只分组、不捕获。页面上的编号从 1 开始,和 $1 一致。\w 只是 [A-Za-z0-9_],不包含汉字和带音标的字母。先看方言。很多编辑器用 PCRE,\w 会包含重音字母。这里默认不包含。
像 (a+)+ 这种嵌套量词,遇到很长又匹配失败的文本会非常慢。页面在 5000 处命中后停止列举,但没法把这种表达式变快。把范围写窄一些。