正则表达式很强,也很容易写出“看起来能用,实际会误伤”的规则。比如提取手机号、清理日志、替换 URL、匹配邮箱,测试样本太少就容易漏掉边界情况。

这篇讲正则测试时应该看什么,怎么用 正则表达式测试工具正则批量提取器 检查匹配、分组和替换结果。

先明确你要的是匹配还是提取#

很多人一上来就写表达式,但没有想清楚目标。

常见目标有三种:

  • 判断一段文本是否符合规则。
  • 从文本里提取某些片段。
  • 把匹配到的内容替换成新格式。

例如匹配手机号和提取手机号,写法可能不同。判断手机号时通常要加开头结尾:

regex已剪下 ✓
^1[3-9]\d{9}$

从一大段文本里提取手机号时,就不能加整段开头结尾:

regex已剪下 ✓
1[3-9]\d{9}

常见标志位要理解#

JavaScript 正则常见标志位:

  • g:全局匹配,不只找第一个。
  • i:忽略大小写。
  • m:多行模式,让 ^$ 按行工作。
  • s:让 . 可以匹配换行。
  • u:更好地处理 Unicode。

如果你发现只匹配到第一个结果,通常是少了 g。如果跨行文本匹配失败,可能需要 s,也可能应该改用更明确的字符范围。

分组不是越多越好#

括号会创建分组:

regex已剪下 ✓
(\d{4})-(\d{2})-(\d{2})

它可以把 2026-07-07 分成 year、month、day。但如果只是为了控制优先级,不需要捕获,可以用非捕获分组:

regex已剪下 ✓
(?:jpg|png|webp)

分组太多会让替换和维护变复杂。写完后最好在 正则表达式测试工具 里看每个 group 的结果,确认顺序没有错。

替换前先看命中范围#

批量替换最危险。比如你想把所有 HTTP 链接替换成 HTTPS,如果规则太宽,可能会改坏日志、代码片段或已经正确的链接。

建议流程:

  1. 先只做匹配,不替换。
  2. 看命中数量和命中文本。
  3. 加几个反例测试。
  4. 再写替换模板。
  5. 最后复制结果。

对重要文本,先用 文本 Diff 工具 对比替换前后差异。

批量提取适合哪些场景#

正则批量提取器 适合从大段文本中提取:

  • 邮箱、手机号、订单号。
  • URL、域名、路径。
  • 日志里的错误码。
  • Markdown 或 HTML 里的链接。
  • CSV 里某个固定格式字段。

提取时建议输出去重后的结果,再人工抽查几条。正则很适合粗筛,但不要默认结果 100% 正确。

写正则时要准备反例#

只用正确样本测试,很容易误判。比如你要匹配价格:

正确样本:

text已剪下 ✓
¥199
199.00

反例也要准备:

text已剪下 ✓
abc199
199abc
1.2.3

一个可靠的正则,应该清楚地知道自己“不匹配什么”。

总结#

正则表达式测试不只是看绿色命中。你要检查目标、标志位、分组、替换范围、反例和边界情况。

写完正则后,可以先用 正则表达式测试工具 看匹配和分组,再用 正则批量提取器 处理大文本,最后用 Diff 检查替换结果。