素材阁

正则表达式速查

正则表达式元字符与语法速查:字符匹配、数量词、位置边界、分组引用、断言与标志,每条附含义与示例; 另附 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
网址 URLhttp / 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)为准。

  1. 在搜索框输入语法或用途(如 分组、贪婪、邮箱、边界),表格实时筛选。
  2. 或点分类按钮只看某一类:字符匹配、数量词、位置边界、分组引用、断言、标志,或直接看「现成正则」。
  3. 每条语法给出写法、含义与示例,点击写法即可复制。
  4. 「现成常用正则」区收录邮箱、手机号、URL、身份证、日期等常用表达式,复制后直接用于校验。

常见问题

贪婪匹配和懒惰匹配有什么区别?
默认数量词是贪婪的,会尽可能多匹配;在数量词后加 ? 变成懒惰匹配,尽可能少匹配。例如 <.+> 会匹配到最后一个 >,<.+?> 只匹配到最近的 >。
为什么我的正则能匹配但不能全局替换?
多半是没加 g 标志。g(global)表示匹配所有结果,不加只会替换第一处;在 JavaScript 里用 /pattern/g 或在 replace 时带 g。
邮箱正则为什么千奇百怪?
因为邮箱规范(RFC 5322)允许的写法非常复杂,严格完整的正则又长又难维护。多数场景用一条较宽松的表达式先拦住明显错误即可,最终有效性还是靠「发一封验证邮件」。
断言(环视)在老浏览器里能用吗?
先行断言在大多数环境都支持,后行断言((?<=…))在老版本 IE 中不支持。如需兼容老浏览器,改用捕获分组配合替换实现。

延伸阅读

相关工具