正则表达式在线测试与替换

在线正则测试工具:实时高亮匹配结果、逐条列出分组捕获、预览替换效果,支持 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> 引用命名分组。

工具会保存我测试的正则吗?

不会。正则与测试文本都只在当前页面内存中处理,不发送到服务器,关闭页面即消失。

相关教程

相关工具