正则速查表

常用正则语法与示例速查。

分类符号说明
元字符.匹配除换行符外的任意单个字符
元字符\d匹配一个数字,等价于 [0-9]
元字符\D匹配一个非数字字符
元字符\w匹配字母、数字或下划线,等价于 [A-Za-z0-9_]
元字符\W匹配非单词字符
元字符\s匹配任意空白字符(空格、制表符、换行等)
元字符\S匹配任意非空白字符
断言^匹配字符串(或多行模式下行)的开始位置
断言$匹配字符串(或多行模式下行)的结束位置
断言\b匹配单词边界
断言\B匹配非单词边界
断言(?=...)正向先行断言:其后必须紧跟 ... 才匹配,不消耗字符
断言(?!...)负向先行断言:其后不能紧跟 ...
断言(?<=...)正向后行断言:其前必须紧跟 ...
断言(?<!...)负向后行断言:其前不能紧跟 ...
量词*匹配前一项 0 次或多次
量词+匹配前一项 1 次或多次
量词?匹配前一项 0 次或 1 次
量词{n}匹配前一项恰好 n 次
量词{n,}匹配前一项至少 n 次
量词{n,m}匹配前一项 n 到 m 次
量词*? +? ??惰性(非贪婪)量词,尽量少匹配
字符类[abc]匹配 a、b、c 中的任意一个字符
字符类[^abc]匹配除 a、b、c 之外的任意字符
字符类[a-z]匹配 a 到 z 范围内的任意字符
字符类[a-zA-Z0-9]匹配字母或数字
分组(...)捕获分组,可通过序号引用
分组(?:...)非捕获分组,只分组不记录
分组(?<name>...)具名捕获分组,可通过 name 引用
分组a|b匹配 a 或 b

常用正则示例

邮箱地址^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$
中国大陆手机号^1[3-9]\d{9}$
URL^https?:\/\/[\w.-]+(?::\d+)?(?:\/[^\s]*)?$
IPv4 地址^(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)$
日期 (YYYY-MM-DD)^\d{4}-\d{2}-\d{2}$
十六进制颜色^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$

什么是正则速查表?

正则速查表是一份聚合常用正则表达式(Regular Expression)语法与典型场景示例的参考页面,而非一个“执行/测试”工具。内容通常包括:字符类(\d \w \s)、量词(* + ? {n,m})、锚点(^ $ \b)、分组与捕获(() (?:) (?<name>))、断言((?=) (?!) (?<=) (?<!)),以及常见业务场景的现成正则,比如邮箱、手机号、URL、身份证号的校验表达式。

为什么使用正则速查表?

正则语法本身简洁但符号密集,很多写法(比如非贪婪匹配.*?、命名捕获组、零宽断言)不常用就容易忘记,速查表可以在写代码或脚本时快速核对语法而不用每次去查文档。适合前端/后端开发者做表单校验、日志分析、文本清洗时随手查阅;相比正则在线测试工具(如regex101),速查表更侧重“语法记忆”而非“针对具体输入调试匹配结果”,两者常配合使用——先在速查表找到语法或现成正则,再拿到测试工具里用真实数据验证。

使用示例

手机号校验(中国大陆)

^1[3-9]\d{9}$ 匹配以1开头、第二位3-9、后面9位数字,共11位,如13812345678能匹配,1381234567(10位)不匹配。

邮箱粗略校验

^[\w.-]+@[\w-]+\.[a-zA-Z]{2,}$ 能匹配 [email protected],但真正符合RFC 5322标准的邮箱正则极其复杂,业务上常用简化版本再配合服务端二次校验。

非贪婪匹配的坑

对字符串 <a>x</a><b>y</b> 用 <.*> 会贪婪匹配到整个字符串<a>x</a><b>y</b>,改成 <.*?> 则只匹配到第一个<a>,这是初学者最常踩的坑。

使用提示

复杂正则建议加注释或拆分成多个简单正则配合业务逻辑判断,一条极长的“万能正则”往往难以维护和调试,可读性和可维护性有时比“一行解决”更重要。

常见问题

这份速查表包含哪些内容?
涵盖常用元字符(\d \w \s 等)、断言(^ $ \b 及零宽断言)、量词(* + ? {n,m})、字符类([abc] [a-z])与分组语法,并附常见业务正则示例。
示例正则可以直接用吗?
可以,邮箱、手机号、URL、IPv4、日期、十六进制颜色等示例覆盖了大部分常见校验场景,可点击复制后按需微调。
数据会上传吗?
不会。本页内容为静态内置表格,过滤与复制均在浏览器本地完成。
正则表达式能校验所有邮箱格式吗?
不能百分百准确,邮箱标准RFC 5322允许非常复杂的写法(引号、注释等),实际项目通常用简化正则做前端提示,再靠发送验证邮件确认真实性。
JS、Python、PCRE的正则语法一样吗?
核心语法(量词、字符类)基本通用,但细节有差异,比如JS原生不支持递归、命名捕获组写法在不同语言中略有不同((?<name>) vs (?P<name>)),跨语言迁移正则时要注意。
什么是零宽断言?
(?=...)正向先行、(?!...)负向先行、(?<=...)正向后行、(?<!...)负向后行,它们只判断某位置前后是否符合模式,但不消耗字符,常用于“匹配数字但后面必须紧跟%”这类需求。
贪婪和非贪婪有什么区别?
默认量词(*、+)是贪婪的,会尽可能多匹配;加?变成非贪婪(*?、+?),会尽可能少匹配,处理HTML标签、引号包裹内容时经常需要非贪婪以避免跨标签匹配。
为什么我的正则在某些引擎里报错?
常见是使用了引擎不支持的特性,比如老版本JS不支持命名捕获组或后行断言,需确认目标运行环境(浏览器版本/Node版本)的正则引擎能力。

相关工具

← 返回工具箱· 数据均在浏览器本地处理,不上传服务器。