第 5 课
正则调试流程
样例、高亮、回溯风险与常见错误。
可靠的正则工作应 测试驱动。把模式当代码:输入样例,期望明确的匹配结果。
第一步:收集代表性样例
准备 应匹配 与 不应匹配 的输入:
- 生产日志中的典型行(脱敏)
- 边界:空串、Unicode、多余空格、缺字段
- 曾经出现过的误匹配
演示串上的一次高亮不算测试套件。
第二步:逐步收窄模式
先严格、再放宽:
- 用
^固定前缀 - 可变段用字符类
- 仅在长度确实变化处加量词
- 确有需求再开
i或u
若匹配过多,先 收紧,再考虑用负向 lookahead 排除。
第三步:检查捕获组
每次匹配核对各组是否对应预期字段。替换模板里 $n 错位很常见。
用替换预览在 每一行 样例上确认输出顺序。
第四步:警惕灾难性回溯
大输入上的嵌套量词如 (.*)* 可能卡死引擎,表现为:
- 浏览器粘贴后无响应
- CI Lint 超时
可改用惰性/占有量词、原子组(若支持),或重写以避免 .* 夹心结构。
常见错误清单
| 错误 | 现象 |
|---|---|
忘记 g | 只高亮第一处 |
无 s 却用 . | 多行 JSON 失败 |
替换中未转义 $ | 错误插入字面 $1 |
用 \w 匹配国际化文本 | 漏合法姓名 |
| 解析嵌套格式 | HTML/JSON 误匹配 |
要点
交付正则时应附带 样例、文档化修饰符、对真实粘贴规模的替换预览。复杂度上升时改用解析器——正则应作手术刀,而非锤子。