写正则时最痛苦的不是逻辑,而是记不住语法。每次都要去翻文档、查 Stack Overflow,时间就这样溜走。这张速查表把日常开发中真正高频的模式集中在一起,按类别整理,每个都附上匹配示例和非匹配示例。收藏一页,覆盖 90% 的正则使用场景。想即时验证某个 pattern,就粘到在线 regex tester 里。
字符类速查
字符类用来匹配某一类字符,是写正则的入门必修课。
| 正则 | 含义 | 匹配示例 | 不匹配示例 |
|------|------|----------|------------|
| \d | 任意一个数字 | 7 | a |
| \D | 任意非数字字符 | a | 7 |
| \w | 字母、数字、下划线 | a_1 | @ |
| \W | 非单词字符 | @! | a |
| \s | 空白字符(空格、制表符、换行) | | a |
| \S | 非空白字符 | a | |
| . | 除换行符外的任意字符 | a 1 ! | 换行符 |
自定义字符类同样常用:
[aeiou]匹配任意元音字母[a-z]匹配任意小写字母[A-Z0-9]匹配大写字母或数字[^0-9]匹配非数字(方括号内的^表示取反)
锚点速查
锚点匹配位置而非字符,用来约束模式的边界。
| 正则 | 含义 | 匹配示例 | 不匹配示例 |
|------|------|----------|------------|
| ^abc | 以 abc 开头 | abcdef | xabcdef |
| abc$ | 以 abc 结尾 | xyzabc | abcd |
| \babc\b | 独立单词 abc | abc(独立) | xabcy(嵌在词中) |
| \Babc | 非单词边界处 | xabcy | abc |
^ 和 $ 默认匹配整个字符串的开头和结尾。想匹配每一行的边界,需要加 m 修饰符。
量词速查
量词决定前面的元素出现多少次。
| 正则 | 含义 | 匹配示例 | 不匹配示例 |
|------|------|----------|------------|
| a* | 0 次或多次 | aaa、空串 | b |
| a+ | 1 次或多次 | aaa | 空串、b |
| a? | 0 次或 1 次 | a、空串 | aa |
| a{3} | 恰好 3 次 | aaa | aa |
| a{2,4} | 2 到 4 次 | aaa | a |
| a{2,} | 至少 2 次 | aaaa | a |
默认是贪婪模式,会尽可能多匹配。加 ? 变成非贪婪,例如 a+? 会匹配最少字符。处理 HTML 标签时,非贪婪几乎是必备——用 regex explainer 可以拆解其中的原因。
分组与环视
分组和环视是构建复杂模式的关键。分组把多个元素当作整体,环视则匹配位置而不消耗字符。
| 正则 | 含义 | 匹配示例 | 不匹配示例 |
|------|------|----------|------------|
| (ab)+ | ab 重复 1 次以上 | abab | aba |
| (?:ab) | 非捕获分组 | ab | ba |
| a\|b | a 或 b | a、b | c |
| (?=abc) | 后面必须是 abc | xyzabc 中的 xyz 后位置 | 其他位置 |
| (?!abc) | 后面必须不是 abc | xyz 后不是 abc 的位置 | xyz 后是 abc |
| (?<=abc) | 前面必须是 abc | abcdef 中 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 跑一遍,能在上线前暴露问题。
用 DevToolkit Pro 在线测试
记下语法只是第一步,真正写起来还要不断试错。推荐两个纯前端运行的工具,可以边写边看结果:
两个工具配合使用效率最高。测试器负责验证,解释器负责理解。你的输入文本不会被发送到任何服务器,敏感数据可以放心测试。
总结
这张速查表覆盖了字符类、锚点、量词、分组、环视五大语法类别,以及邮箱、URL、手机号、IP、日期、密码等高频实战模式。建议收藏到浏览器书签,写正则卡壳时翻一翻,比一次次搜索要快得多。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。