核心答案:正则表达式是文本匹配模式语言——\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] 非数字 |
| ^ $ | 行首/行尾 | ^# 标题行 |
| 或 | cat | dog |
| ( ) | 分组捕获 | (\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 标签内容 | <([^>]+)>([^<]*)\1> |
贪婪与非贪婪
- 贪婪(默认):<.+> 对 "a" 匹配整个串(吃到最后一个 >)
- 非贪婪(加 ?):<.+?> 只匹配 ""
- 经典坑:提取标签内容必须用非贪婪或 [^>]+
调试技巧
- 用 regex101.com 可视化调试:实时高亮、逐字符解释
- 复杂正则拆小步:先匹配片段,再组合
- 加注释模式(/x 或 (?#comment))提高可读性
- 警惕灾难性回溯:(a+)+ 对 "aaaaaaaaaaaa!" 指数级耗时——嵌套量词是 ReDoS 根源
常见误区
- . 匹配换行:默认不匹配
,跨行匹配用 [\s\S] 或 s 标志。
- 转义层级:JS 字符串里写 "\d"(先过字符串转义),正则字面量直接 /\d/。
- 用正则解析 HTML:HTML 不是正则语言,嵌套结构正则无法完备处理——用 DOM 解析器。
- 邮箱正则追求完美:RFC5322 完整正则长达 400+ 字符,实用场景用简单版 + 发验证邮件确认。
用[正则测试工具](/c/dev/regex)实时匹配测试并查看捕获分组。