🔍

正则表达式实战速查

文本处理发布于 2026-10-09·阅读约 9 分钟

一、场景:正则写了不出效果

正则表达式是"写时爽、查时废"的典型:明明看起来对,就是不匹配。问题通常出在转义、贪婪模式或边界处理上。最有效的解决方式是找一块真实的测试文本,边写边看高亮结果——这正是正则测试工具的用法:左边写表达式,右边贴样例文本,匹配部分实时高亮,配合可视化解释逐段理解匹配过程。

二、高频语法速查

  • 字符类:\d 数字、\w 字母数字下划线、\s 空白、[abc] 枚举、[^abc] 取反;
  • 量词:* 0+ 次、+ 1+ 次、? 0 或 1 次、{2,5} 指定范围;
  • 贪婪 vs 懒惰:.* 会尽量多吃,.*? 尽量少吃。提取 HTML 标签内容必须用懒惰模式,否则会从第一个开始符一路吃到最后一行的结束符;
  • 边界:^ 行首、$ 行尾、\b 单词边界。校验"整串是手机号"必须加 ^...$,否则 11 位数字里包含一段合法手机号也会误判通过;
  • 分组与捕获:(...) 捕获分组可按序号引用($1、$2),(?:...) 只分组不捕获;
  • 环视断言:(?=...) 后面是、(?!...) 后面不是。例如给金额加千分位:(?=\B(\d{3})+$) 位置前插入逗号。

三、四个可以直接复用的正则

  • 大陆手机号:^1[3-9]\d{9}$(宽松版;严格按号段维护成本高,宽松版更适合前端初筛);
  • 邮箱:^[\w.+-]+@[\w-]+\.[\w.]+$(实用版,完全符合 RFC 的版本没有可读性);
  • URL 提取:https?:\/\/[^\s),配 g 标志逐个提取文本中的链接;
  • 模板变量:\{\{(\w+)\}\},配合替换把 {{name}} 换成数据字段。

每一条都可以直接粘贴进正则测试工具验证:修改表达式或样例文本,高亮即时更新,还能查看分组捕获结果。

四、配合文本处理工具批量操作

正则定型后,批量替换交给文本处理:粘贴整段文本,输入表达式与替换模板,支持"大小写敏感""全局替换"开关。典型任务:批量清理日志时间前缀、把 CSV 改成分号分隔、删除空行。

处理前后用文本统计对比行数与字符数,确认替换量符合预期,避免全局替换误伤。

五、常见问题

  • 为什么我的正则在线下工具能用,到代码里就报错:字符串字面量里的反斜杠要双重转义,JS 里 \d 要写成 "\\d",建议用 /.../ 字面量或 String.raw 避坑;
  • 匹配中文:简单场景用 [\u4e00-\u9fa5];涉及扩展区(生僻字、emoji)时用 Unicode 属性转义 \p{Script=Han}(需 u 标志);
  • catastrophic 回溯:嵌套量词如 (a+)+b 在长不匹配文本上会指数级变慢,出现"页面卡死"先检查这类结构。

六、小结

正则的性价比取决于调试环境:一块实时高亮的试验田比十篇教程有用。把常用表达式存进笔记,遇到相似场景先在工具里跑一遍样例再进代码,可以避开绝大多数线上事故。

本篇涉及的工具

继续阅读