标志位与匹配规则
本工具使用浏览器原生的 JavaScript 正则引擎,语法与 Chrome、Node.js 完全一致。五个标志的作用:g 表示全局匹配,不加它只返回第一处结果,replace 也只替换一次;i 忽略大小写;m 让 ^ 和 $ 匹配每一行的开头结尾,而不只是整段文本的首尾;s 让点号也能匹配换行符;u 开启 Unicode 模式,这时 \u{1F600} 这类码点写法和对 emoji 的整体匹配才正确。
结果区会把所有匹配用底色标出,并逐条列出起始下标和捕获分组。分组用圆括号产生,按左括号出现顺序编号,在替换串里用 $1、$2 引用,$& 代表整个匹配,$$ 代表一个美元符号;不需要捕获时写 (?:...) 可以少一次记录、稍快一些。具名分组写成 (?
常见坑与调试技巧
第一是贪婪匹配:.* 默认尽可能多地吃字符,想匹配一对标签之间的内容却会一直吃到最后一个标签,改成懒惰的 .*? 即可。第二是点号不匹配换行,跨行匹配要么加 s 标志,要么用 [\s\S] 代替点号。第三是 \b 单词边界基于英文字母、数字和下划线判断,对中文几乎总是成立,用它来切中文词没有意义。第四是特殊字符必须转义,点、加号、星号、问号、括号、方括号、反斜杠在正则里都有含义,想匹配字面量要在前面加反斜杠。
性能上要警惕灾难性回溯:形如 (a+)+b 这样的嵌套量词,遇到长串不匹配的文本时尝试次数会指数增长,页面会卡死。避免在量词里再套量词,尽量用更精确的字符集。另外,正则不适合解析 HTML 和嵌套结构,那类任务应该用真正的解析器。本页所有匹配都在你的浏览器里执行,文本不会上传,可以放心测试日志和接口数据。