核心答案:正则表达式是文本匹配模式语言——\d 匹配数字、\w 匹配单词字符、. 匹配任意、* 重复 0+ 次、+ 重复 1+ 次、? 可选、{n,m} 定长。手机号:^1[3-9]\d{9}$

语法速查表

符号含义例子
\d数字 [0-9]\d{4} 匹配年份
\D非数字
\w单词字符 [A-Za-z0-9_]变量名
\s空白(空格/Tab/换行)分隔符
.任意字符(除换行)a.c 匹配 abc
*前项 0 次或多次ab* 匹配 a/abb
+前项 1 次或多次\d+ 匹配整数
?前项 0 或 1 次https? 匹配 http/https
{n}恰好 n 次\d{11}
{n,m}n 到 m 次\w{6,16} 密码
[abc]字符集之一[aeiou] 元音
[^abc]排除字符集[^0-9] 非数字
^ $行首/行尾^# 标题行
catdog
( )分组捕获(\d{4})-(\d{2})

高频模板 8 个

场景正则
中国大陆手机号^1[3-9]\d{9}$
邮箱^[\w.+-]+@[\w-]+\.[\w.]+$
身份证号^\d{17}[\dXx]$
URL^https?://[\w.-]+
IPv4^(\d{1,3}\.){3}\d{1,3}$
日期 YYYY-MM-DD^\d{4}-\d{2}-\d{2}$
强密码(8+位含大小写数字)^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
提取 HTML 标签内容<([^>]+)>([^<]*)

贪婪与非贪婪

  • 贪婪(默认):<.+> 对 "a" 匹配整个串(吃到最后一个 >)
  • 非贪婪(加 ?):<.+?> 只匹配 ""
  • 经典坑:提取标签内容必须用非贪婪或 [^>]+

调试技巧

  1. 用 regex101.com 可视化调试:实时高亮、逐字符解释
  2. 复杂正则拆小步:先匹配片段,再组合
  3. 加注释模式(/x 或 (?#comment))提高可读性
  4. 警惕灾难性回溯:(a+)+ 对 "aaaaaaaaaaaa!" 指数级耗时——嵌套量词是 ReDoS 根源

常见误区

  1. . 匹配换行:默认不匹配

,跨行匹配用 [\s\S] 或 s 标志。

  1. 转义层级:JS 字符串里写 "\d"(先过字符串转义),正则字面量直接 /\d/。
  2. 用正则解析 HTML:HTML 不是正则语言,嵌套结构正则无法完备处理——用 DOM 解析器。
  3. 邮箱正则追求完美:RFC5322 完整正则长达 400+ 字符,实用场景用简单版 + 发验证邮件确认。

用[正则测试工具](/c/dev/regex)实时匹配测试并查看捕获分组。