跳到主要内容
代码工具2026-06-015 分钟阅读

正则表达式速查表:30 个最常用模式及示例

写正则时最痛苦的不是逻辑,而是记不住语法。每次都要去翻文档、查 Stack Overflow,时间就这样溜走。这张速查表把日常开发中真正高频的模式集中在一起,按类别整理,每个都附上匹配示例和非匹配示例。收藏一页,覆盖 90% 的正则使用场景。想即时验证某个 pattern,就粘到在线 regex tester 里。

字符类速查

字符类用来匹配某一类字符,是写正则的入门必修课。

正则含义匹配示例不匹配示例
\d任意一个数字7a
\D任意非数字字符a7
\w字母、数字、下划线a_1@
\W非单词字符@!a
\s空白字符(空格、制表符、换行) a
\S非空白字符a
.除换行符外的任意字符a 1 !换行符

自定义字符类同样常用:

  • [aeiou] 匹配任意元音字母
  • [a-z] 匹配任意小写字母
  • [A-Z0-9] 匹配大写字母或数字
  • [^0-9] 匹配非数字(方括号内的 ^ 表示取反)

锚点速查

锚点匹配位置而非字符,用来约束模式的边界。

正则含义匹配示例不匹配示例
^abc以 abc 开头abcdefxabcdef
abc$以 abc 结尾xyzabcabcd
\babc\b独立单词 abcabc(独立)xabcy(嵌在词中)
\Babc非单词边界处xabcyabc

^ 和 $ 默认匹配整个字符串的开头和结尾。想匹配每一行的边界,需要加 m 修饰符。

量词速查

量词决定前面的元素出现多少次。

正则含义匹配示例不匹配示例
a*0 次或多次aaa、空串b
a+1 次或多次aaa空串、b
a?0 次或 1 次a、空串aa
a{3}恰好 3 次aaaaa
a{2,4}2 到 4 次aaaa
a{2,}至少 2 次aaaaa

默认是贪婪模式,会尽可能多匹配。加 ? 变成非贪婪,例如 a+? 会匹配最少字符。处理 HTML 标签时,非贪婪几乎是必备——用 regex explainer 可以拆解其中的原因。

分组与环视

分组和环视是构建复杂模式的关键。分组把多个元素当作整体,环视则匹配位置而不消耗字符。

正则含义匹配示例不匹配示例
(ab)+ab 重复 1 次以上abababa
(?:ab)非捕获分组abba
a|ba 或 ba、bc
(?=abc)后面必须是 abcxyzabc 中的 xyz 后位置其他位置
(?!abc)后面必须不是 abcxyz 后不是 abc 的位置xyz 后是 abc
(?<=abc)前面必须是 abcabcdef 中 def 前的位置其他位置
(?<!abc)前面必须不是 abc其他位置abcdef 中 def 前

捕获组用 \1、\2 反向引用。例如 (\w+)\s\1 匹配重复单词如 hello hello。

常用模式库

下面是项目里出现频率最高的实战模式,直接复制就能用。

邮箱

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

匹配 user@example.com,不匹配 user@example。

URL

https?:\/\/[^\s]+

匹配 https://example.com/path,不匹配 ftp://example.com。

中国手机号

^1[3-9]\d{9}$

匹配 13812345678,不匹配 12345678901。

IPv4 地址

^(?:25[0-5]|2[0-4]\d|[01]?\d\d?)(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)){3}$

匹配 192.168.1.1,不匹配 256.0.0.1。

日期(YYYY-MM-DD)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

匹配 2026-07-28,不匹配 2026-13-01。

密码强度(至少 8 位,含大小写字母和数字)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$

匹配 Abc12345,不匹配 abc12345(缺大写)。

18 位身份证号

^[1-9]\d{5}(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]$

匹配 110101199001011234,不匹配 12345。

QQ 号(5-12 位)

^[1-9]\d{4,11}$

邮政编码(中国)

^[1-9]\d{5}$

十六进制颜色

^#?(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$

匹配 #fff、#1A2B3C,不匹配 #1234。

实战示例:用 JavaScript 提取邮箱

下面是从一段文本中批量提取邮箱的代码:

const text = "联系 alice@example.com 或 bob@test.org 获取详情";
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
const emails = text.match(emailRegex);
console.log(emails);
// ["alice@example.com", "bob@test.org"]

注意末尾的 g 修饰符。没有它,match 只会返回第一个结果。

调试正则的最佳实践

写正则容易踩坑。下面几条经验能帮你少走弯路。

第一,写一点测一点。不要憋出 50 个字符的长模式再测,而是边写边用在线工具验证每一段。第二,优先用字符类而非点号。[^>]+ 比 .* 更安全,避免贪婪匹配越界。第三,警惕灾难性回溯。嵌套量词如 (a+)+ 在某些输入下会让引擎指数级耗时,遇到长时间卡顿时优先怀疑这种结构。第四,用非捕获分组减少开销。不需要捕获内容时,(?:...) 比 (...) 性能更好。第五,测试边界情况。空字符串、单字符、超长输入、Unicode 字符都应该覆盖。把它们放进 regex tester 跑一遍,能在上线前暴露问题。

用 ToolVault 工具匣 在线测试

记下语法只是第一步,真正写起来还要不断试错。推荐两个纯前端运行的工具,可以边写边看结果:

两个工具配合使用效率最高。测试器负责验证,解释器负责理解。你的输入文本不会被发送到任何服务器,敏感数据可以放心测试。

总结

这张速查表覆盖了字符类、锚点、量词、分组、环视五大语法类别,以及邮箱、URL、手机号、IP、日期、密码等高频实战模式。建议收藏到浏览器书签,写正则卡壳时翻一翻,比一次次搜索要快得多。

实现注记

配套测试器有三个不上语法表但真实存在的取舍:匹配计算放进 worker,但 worker 加载失败必须把错误亮出来——静默清空结果等于伪造「无匹配」;量词放开后 500ms 内能产出 5 万+ 匹配,全量渲染成表格会把页面冻住,所以只展示前 1000 条并明示溢出;match/replace 模式做了本地持久化,刷新后不必重选。


本文由 ToolVault 工具匣 提供。更多免费本地工具见 首页。