正则表达式速查
正则表达式元字符与语法速查:字符匹配、数量词、位置边界、分组引用、断言与标志,每条附含义与示例; 另附 18 条现成常用正则(邮箱、手机号、URL、身份证、日期、IPv4 等),点击即可复制。 支持搜索与分类筛选。语法以 ECMAScript(JavaScript)为准,多数写法在其它语言中通用。
字符匹配
匹配单个字符的写法,大多数语言通用。
| 语法 | 含义 | 示例 |
|---|---|---|
| 匹配除换行外的任意单个字符 | a.c → abc / aXc | |
| 数字(等价 [0-9]) | \d{3} → 123 | |
| 非数字 | \D → a | |
| 字母、数字、下划线([A-Za-z0-9_]) | \w+ → user_1 | |
| 非 \w(即符号或空格) | \W → - | |
| 空白字符(空格、制表符、换行) | \s+ → 连续空格 | |
| 非空白字符 | \S+ → abc | |
| 字符集合,匹配其中之一 | [aeiou] → 元音字母 | |
| 否定集合,匹配不在集合中的字符 | [^0-9] → 非数字 | |
| 范围写法,匹配区间内字符 | [A-Za-z] → 字母 | |
| 转义特殊字符(如 \. 匹配真正的点号) | \. → . |
数量词(重复次数)
默认是贪婪匹配(尽可能多),加 ? 变为懒惰匹配。
| 语法 | 含义 | 示例 |
|---|---|---|
| 前面的字符出现 0 次或多次 | ab* → a / ab / abbb | |
| 出现 1 次或多次 | ab+ → ab / abbb | |
| 出现 0 次或 1 次(可选) | colou?r → color / colour | |
| 恰好出现 n 次 | \d{3} → 123 | |
| 至少出现 n 次 | \d{3,} → 123 / 12345 | |
| 出现 n 到 m 次 | \d{2,4} → 12 / 1234 | |
| 懒惰匹配:尽可能少地重复 | <.+?> → 匹配最短标签 | |
| 懒惰匹配:至少 1 次且尽量少 | \d+? → 1 |
位置与边界
不消耗字符,只声明匹配位置。
| 语法 | 含义 | 示例 |
|---|---|---|
| 字符串开头(多行模式下为行首) | ^abc → 以 abc 开头 | |
| 字符串结尾(多行模式下为行尾) | abc$ → 以 abc 结尾 | |
| 单词边界(字母数字与其它字符的交界) | \bcat\b → 独立单词 cat | |
| 非单词边界 | \Bcat → 词中的 cat |
分组与引用
用于组合子表达式、提取或复用匹配内容。
| 语法 | 含义 | 示例 |
|---|---|---|
| 捕获分组,可单独取出匹配内容 | (\d{4})-(\d{2}) → 年、月 | |
| 非捕获分组,只分组不占用编号 | (?:ab)+ → abab | |
| 命名捕获分组,按名字取用 | (?<year>\d{4}) | |
| 反向引用第 1 个捕获组的内容 | (\w)\1 → aa / bb | |
| 引用命名分组 | (?<c>\w)\k<c> | |
| 或:匹配左右任一侧表达式 | cat|dog → cat 或 dog |
断言(环视)
不消耗字符的前后条件判断,注意 IE 等老环境不支持后行断言。
| 语法 | 含义 | 示例 |
|---|---|---|
| 正向先行断言:后面必须是… | \d(?=元) → 数字后跟「元」 | |
| 负向先行断言:后面不能是… | \d(?!元) | |
| 正向后行断言:前面必须是… | (?<=¥)\d+ | |
| 负向后行断言:前面不能是… | (?<!\d)\d{3} |
常用标志(flags)
写在正则结尾,如 /abc/gi。
| 语法 | 含义 | 示例 |
|---|---|---|
| 全局匹配:找到所有结果而非第一个 | — | |
| 忽略大小写 | — | |
| 多行模式:^ 和 $ 匹配每行首尾 | — | |
| 点号 . 也匹配换行符 | — | |
| Unicode 模式,正确处理多字节字符 | — |
现成常用正则
点击表达式即可复制,可直接用于表单校验或数据提取。
| 用途 | 表达式 | 说明 |
|---|---|---|
| 邮箱地址 | 常见邮箱格式校验(宽松版) | |
| 中国手机号 | 11 位,1 开头,第二位 3-9 | |
| 网址 URL | http / https 开头的完整地址 | |
| IPv4 地址 | 0-255 四段点分格式 | |
| 身份证号(18 位) | 二代身份证格式(含校验位) | |
| 日期 YYYY-MM-DD | 年月日格式校验 | |
| 时间 HH:mm(:ss) | 24 小时制时间 | |
| 邮政编码 | 中国 6 位邮编 | |
| 中文字符 | 匹配任意一个常用汉字 | |
| 整数 | 可带负号的整数 | |
| 小数 / 浮点数 | 整数或小数 | |
| 十六进制颜色 | #fff 或 #ffffff | |
| 强密码(≥8 位含大小写与数字) | 同时含小写、大写与数字且长度≥8 | |
| HTML 标签 | 匹配开始 / 结束标签,便于清理富文本 | |
| 银行卡号(16-19 位) | 纯数字卡号(不含空格) | |
| 用户名(4-16 位字母数字下划线) | 仅字母、数字、下划线 | |
| 去掉首尾空白 | 配合替换为空可 trim 首尾空白 | |
| 匹配连续空格 | 两个以上空格 / 制表符 |
使用说明
整理正则表达式全部常用语法(字符匹配、数量词、位置边界、分组引用、断言与标志),每条附含义与示例;另附现成常用正则,点击即可复制。语法以 ECMAScript(JavaScript)为准。
- 在搜索框输入语法或用途(如 分组、贪婪、邮箱、边界),表格实时筛选。
- 或点分类按钮只看某一类:字符匹配、数量词、位置边界、分组引用、断言、标志,或直接看「现成正则」。
- 每条语法给出写法、含义与示例,点击写法即可复制。
- 「现成常用正则」区收录邮箱、手机号、URL、身份证、日期等常用表达式,复制后直接用于校验。
常见问题
- 贪婪匹配和懒惰匹配有什么区别?
- 默认数量词是贪婪的,会尽可能多匹配;在数量词后加 ? 变成懒惰匹配,尽可能少匹配。例如 <.+> 会匹配到最后一个 >,<.+?> 只匹配到最近的 >。
- 为什么我的正则能匹配但不能全局替换?
- 多半是没加 g 标志。g(global)表示匹配所有结果,不加只会替换第一处;在 JavaScript 里用 /pattern/g 或在 replace 时带 g。
- 邮箱正则为什么千奇百怪?
- 因为邮箱规范(RFC 5322)允许的写法非常复杂,严格完整的正则又长又难维护。多数场景用一条较宽松的表达式先拦住明显错误即可,最终有效性还是靠「发一封验证邮件」。
- 断言(环视)在老浏览器里能用吗?
- 先行断言在大多数环境都支持,后行断言((?<=…))在老版本 IE 中不支持。如需兼容老浏览器,改用捕获分组配合替换实现。