用好正则表达式的诀窍不是背符号表,而是写一条模式、喂一段文本、立刻看命中结果,反复试错十几轮,规则自然就成型了。
先分清楚:模式、文本、标志位
一条正则由三部分组成。模式定义要找什么,比如 \d+ 表示一串连续数字;测试文本决定去哪里找;标志位控制怎么找。很多人只改模式不动标志位,结果永远只命中第一处——不加 g 时,正则找到第一个匹配就停下来。把模式与文本放在同一界面同步修改,改一个字符看一次高亮,反馈越快理解越快。
标志位怎么选:g、i、m、s、u
g 全局匹配所有命中;i 忽略大小写;m 让 ^ 和 $ 匹配每行头尾而非整段;s 让圆点 . 也能匹配换行,跨行抓取时才有意义;u 按 Unicode 码位处理 emoji 等多字节字符。测试多行日志或配置,通常先开 g 和 m。
捕获组与替换预览:匹配只是第一步
圆括号圈住的内容是捕获组,按出现顺序编号。把 (\d{4})-(\d{2})-(\d{2}) 应用到「订单日期 2026-09-20」,三个组分别拿到年、月、日;替换时用 $1、$2 就能按任意顺序重新拼接,写成 $3/$2/$1 即换成日/月/年。在 在线正则测试工具 里,命中位置直接高亮标色,前八条命中的分组取值逐行列出,替换结果即时预览。
匹配失败时按顺序排查三件事
一查转义:想匹配句点、星号、括号本身必须加反斜杠;二查标志位:多行文本没开 m 时 ^ 只认整段开头;三查语法:模式写错时页面给出的是报错文字而不是「无匹配」,别把两者混淆。
使用技巧
- 从现成模板起步:手机号用 1[3-9]\d{9},邮箱用 [\w.+-]+@[\w-]+\.[\w.-]+,速查表里还有 IPv4 写法,按真实数据收紧。
- 需要整词匹配时用 \b,例如 \bcat\b 不会命中 category,避免查一个单词却捞出半句话。
- 先确认匹配总数符合预期再看替换预览,一次只验证一个假设。
常见问题
正则表达式怎么学才快?
别从符号表背起。挑一个真实需求(如从日志抓日期),放进 正则测试工具 边改边看高亮,十分钟的循环胜过一小时教程。
JS 正则和 Python 正则通用吗?
九成日常写法通用(\d、量词、分组)。差异集中在后行断言、命名组与部分转义细节上,跨语言迁移时务必重跑验证。
为什么匹配不到中文?
中文本身可以匹配,常见原因是混入全角空格或不可见字符,或跨行匹配漏开 s 标志;用 [\u4e00-\u9fa5] 区间可精确限定汉字。
小结
正则靠验证驱动:工具即时摊开结果,你只管提出更小、可检验的规则。