正则表达式怎么测试?匹配、分组、替换和批量提取实用指南
正则表达式写完不能只看能不能匹配,还要检查分组、全局匹配、大小写、换行和替换结果。这篇用常见场景讲正则测试方法。
打开配套工具 →正则表达式很强,也很容易写出“看起来能用,实际会误伤”的规则。比如提取手机号、清理日志、替换 URL、匹配邮箱,测试样本太少就容易漏掉边界情况。
这篇讲正则测试时应该看什么,怎么用 正则表达式测试工具 和 正则批量提取器 检查匹配、分组和替换结果。
先明确你要的是匹配还是提取
很多人一上来就写表达式,但没有想清楚目标。
常见目标有三种:
- 判断一段文本是否符合规则。
- 从文本里提取某些片段。
- 把匹配到的内容替换成新格式。
例如匹配手机号和提取手机号,写法可能不同。判断手机号时通常要加开头结尾:
^1[3-9]\d{9}$从一大段文本里提取手机号时,就不能加整段开头结尾:
1[3-9]\d{9}常见标志位要理解
JavaScript 正则常见标志位:
g:全局匹配,不只找第一个。i:忽略大小写。m:多行模式,让^和$按行工作。s:让.可以匹配换行。u:更好地处理 Unicode。
如果你发现只匹配到第一个结果,通常是少了 g。如果跨行文本匹配失败,可能需要 s,也可能应该改用更明确的字符范围。
分组不是越多越好
括号会创建分组:
(\d{4})-(\d{2})-(\d{2})它可以把 2026-07-07 分成 year、month、day。但如果只是为了控制优先级,不需要捕获,可以用非捕获分组:
(?:jpg|png|webp)分组太多会让替换和维护变复杂。写完后最好在 正则表达式测试工具 里看每个 group 的结果,确认顺序没有错。
替换前先看命中范围
批量替换最危险。比如你想把所有 HTTP 链接替换成 HTTPS,如果规则太宽,可能会改坏日志、代码片段或已经正确的链接。
建议流程:
- 先只做匹配,不替换。
- 看命中数量和命中文本。
- 加几个反例测试。
- 再写替换模板。
- 最后复制结果。
对重要文本,先用 文本 Diff 工具 对比替换前后差异。
批量提取适合哪些场景
正则批量提取器 适合从大段文本中提取:
- 邮箱、手机号、订单号。
- URL、域名、路径。
- 日志里的错误码。
- Markdown 或 HTML 里的链接。
- CSV 里某个固定格式字段。
提取时建议输出去重后的结果,再人工抽查几条。正则很适合粗筛,但不要默认结果 100% 正确。
写正则时要准备反例
只用正确样本测试,很容易误判。比如你要匹配价格:
正确样本:
¥199
199.00反例也要准备:
abc199
199abc
1.2.3一个可靠的正则,应该清楚地知道自己“不匹配什么”。
总结
正则表达式测试不只是看绿色命中。你要检查目标、标志位、分组、替换范围、反例和边界情况。
写完正则后,可以先用 正则表达式测试工具 看匹配和分组,再用 正则批量提取器 处理大文本,最后用 Diff 检查替换结果。