正则表达式实战速查
一、场景:正则写了不出效果
正则表达式是"写时爽、查时废"的典型:明明看起来对,就是不匹配。问题通常出在转义、贪婪模式或边界处理上。最有效的解决方式是找一块真实的测试文本,边写边看高亮结果——这正是正则测试工具的用法:左边写表达式,右边贴样例文本,匹配部分实时高亮,配合可视化解释逐段理解匹配过程。
二、高频语法速查
- 字符类:
\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 在长不匹配文本上会指数级变慢,出现"页面卡死"先检查这类结构。
六、小结
正则的性价比取决于调试环境:一块实时高亮的试验田比十篇教程有用。把常用表达式存进笔记,遇到相似场景先在工具里跑一遍样例再进代码,可以避开绝大多数线上事故。
