正则表达式在线测试与替换
在线正则测试工具:实时高亮匹配结果、逐条列出分组捕获、预览替换效果,支持 g i m s u 五种标志与语法错误定位。全部在浏览器本地运行,不上传数据。
匹配置信明细
正则表达式用一套紧凑的符号描述文本模式,用于查找、校验与批量替换。它的难点不在语法本身,而在于写完不知道到底匹配到了什么——贪婪与懒惰、分组与回溯的作用往往要看到实际匹配结果才能确认。
本工具边输入边测试:匹配片段在原文中高亮显示,下方逐条列出每个匹配的位置与分组内容,并同步预览替换结果。所有处理在浏览器本地完成,测试的文本不会被上传。
五种标志的作用
- g(全局):查找全部匹配。不勾选时只返回第一个匹配,这是「明明有结果却只高亮一处」的最常见原因
- i(忽略大小写):
abc也能匹配ABC - m(多行):让
^与$匹配每一行的开头与结尾,而不是整段文本的首尾 - s(单行):让
.也能匹配换行符。默认情况下.不匹配换行,这是跨行匹配失败的常见原因 - u(Unicode):按码点处理,正确处理 emoji 与部分生僻汉字(如
\u{1F600})
常见使用场景
- 验证手机号、邮箱、身份证号等格式校验规则是否写对
- 从日志或抓取文本中提取指定字段,确认分组编号对应正确
- 批量替换时先预览效果,避免误伤不该改的内容
- 排查正则「匹配过多」或「匹配为零」的原因
两个高频陷阱
第一是贪婪匹配:<.+> 处理 <a><b> 会一次吃掉整段,改成 <.+?> 才会分别匹配。第二是灾难性回溯:形如 (a+)+$ 的嵌套量词在长文本上会指数级耗时,页面看起来像卡死——工具中对匹配数量设了上限,遇到疑似模式会提前停止并提示。
常见问题
为什么只匹配到一个结果?
多半是没有勾选 g(全局)标志。不加 g 时正则只返回第一个匹配,替换也只替换第一处,这是 JavaScript 的默认行为。
如何实现跨行匹配?
点号默认不匹配换行。需要跨行时勾选 s 标志,或用 [\s\S]、[^] 这类显式包含换行的字符集。若只是想让 ^ 与 $ 按行生效,应勾选的是 m 标志。
分组 $1 $2 怎么用?
每对圆括号产生一个分组,按左括号出现顺序从 1 开始编号。替换时用 $1 引用第一个分组的内容,$& 表示整个匹配,$<name> 引用命名分组。
工具会保存我测试的正则吗?
不会。正则与测试文本都只在当前页面内存中处理,不发送到服务器,关闭页面即消失。