首页文本与开发 › 正则表达式在线测试

正则表达式在线测试

输入正则和测试文本,实时高亮所有匹配、列出捕获分组和位置,还能预览替换结果,附语法速查表。

       

标志位与匹配规则

本工具使用浏览器原生的 JavaScript 正则引擎,语法与 Chrome、Node.js 完全一致。五个标志的作用:g 表示全局匹配,不加它只返回第一处结果,replace 也只替换一次;i 忽略大小写;m 让 ^ 和 $ 匹配每一行的开头结尾,而不只是整段文本的首尾;s 让点号也能匹配换行符;u 开启 Unicode 模式,这时 \u{1F600} 这类码点写法和对 emoji 的整体匹配才正确。

结果区会把所有匹配用底色标出,并逐条列出起始下标和捕获分组。分组用圆括号产生,按左括号出现顺序编号,在替换串里用 $1、$2 引用,$& 代表整个匹配,$$ 代表一个美元符号;不需要捕获时写 (?:...) 可以少一次记录、稍快一些。具名分组写成 (?\d{4}),替换时用 $ 引用,可读性好得多。

常见坑与调试技巧

第一是贪婪匹配:.* 默认尽可能多地吃字符,想匹配一对标签之间的内容却会一直吃到最后一个标签,改成懒惰的 .*? 即可。第二是点号不匹配换行,跨行匹配要么加 s 标志,要么用 [\s\S] 代替点号。第三是 \b 单词边界基于英文字母、数字和下划线判断,对中文几乎总是成立,用它来切中文词没有意义。第四是特殊字符必须转义,点、加号、星号、问号、括号、方括号、反斜杠在正则里都有含义,想匹配字面量要在前面加反斜杠。

性能上要警惕灾难性回溯:形如 (a+)+b 这样的嵌套量词,遇到长串不匹配的文本时尝试次数会指数增长,页面会卡死。避免在量词里再套量词,尽量用更精确的字符集。另外,正则不适合解析 HTML 和嵌套结构,那类任务应该用真正的解析器。本页所有匹配都在你的浏览器里执行,文本不会上传,可以放心测试日志和接口数据。

常见问题

为什么只匹配到第一处?

没有勾选 g 标志。不加 g 时 exec 和 replace 都只处理第一个匹配,勾上即可匹配全部。

怎么匹配中文?

可以用 [\u4e00-\u9fa5] 匹配常用汉字,或在 u 标志下用 \p{Script=Han} 这样的 Unicode 属性写法。

替换串里怎么引用分组?

用 $1 到 $9 引用第 n 个括号分组,$& 表示整个匹配,具名分组用 $<名字>,想输出美元符号本身写 $$。

页面卡住了怎么办?

多半是写出了会引起灾难性回溯的表达式,例如 (a+)+。刷新页面并简化表达式,避免量词嵌套。