Make Tools
2026-04-05

正则表达式速查表

实用的正则表达式参考手册,包含语法说明、常用模式和实际案例。从基础到高级的前瞻断言和命名分组。

正则表达式模式匹配开发工具

为什么正则表达式在 2026 年依然重要

正则表达式仍然是验证、搜索和转换文本最高效的方式。尽管有更新的替代方案如解析器组合子和 PEG 语法,但正则表达式无处不在——表单验证、日志解析、IDE 查找替换、grep、sed 和数据管道。

挑战在于记住语法。这个速查表涵盖了 90% 实际场景中需要的模式,每个例子都可以在我们的 正则表达式测试工具 中立即测试。

基础语法参考

字符类

.       任意字符(换行符除外)
\d      数字 [0-9]
\w      单词字符 [a-zA-Z0-9_]
\s      空白字符(空格、制表符、换行)
\D      非数字
\W      非单词字符
\S      非空白字符
[abc]   a、b 或 c 中的任意一个
[^abc]  非 a、b、c
[a-z]   任意小写字母
[a-zA-Z] 任意字母

量词

*       0 次或多次(贪婪)
+       1 次或多次(贪婪)
?       0 次或 1 次
{3}     恰好 3 次
{3,}    3 次或更多
{3,6}   3 到 6 次之间
*?      0 次或多次(懒惰)
+?      1 次或多次(懒惰)

锚点和边界

^       字符串开头(配合 /m 标志匹配行首)
$       字符串结尾(配合 /m 标志匹配行尾)
\b      单词边界
\B      非单词边界

你一定会用到的常用模式

邮箱验证

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

这能匹配大多数有效的邮箱地址。对于 RFC 5322 完全合规,模式会复杂得多——但对于实际的表单验证,这个已经够用了。用 正则表达式测试工具 验证你的输入。

URL 提取

https?://[^\s<>"{}|\\^\`\[\]]+

匹配 HTTP 和 HTTPS URL,不会过度匹配。适用于从文本内容中提取链接。

手机号码(中国大陆)

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

匹配中国大陆 11 位手机号码,以 1 开头,第二位为 3-9。

IPv4 地址

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

验证每个八位字节在 0-255 范围内。交替分支处理了简单的 \d{1,3} 无法满足的范围约束。

日期格式

# ISO 8601: 2026-04-05
^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

# 中文日期: 2026年04月05日
^\d{4}年(?:0[1-9]|1[0-2])月(?:0[1-9]|[12]\d|3[01])日$

十六进制颜色值

# 匹配 #RGB、#RRGGBB 和 #RRGGBBAA
^#(?:[0-9a-fA-F]{3,4}){1,2}$

捕获组和反向引用

捕获组让你可以提取匹配的部分并重新组织文本:

# 交换姓和名
查找:    (\w+)\s+(\w+)
替换:    $2, $1

# 结果: "张 三" → "三, 张"

命名分组

命名分组提高了可读性,特别是在复杂模式中:

# 命名捕获 (JavaScript)
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

# JavaScript 中访问
const match = "2026-04-05".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
console.log(match.groups.year);  // "2026"

非捕获分组

当需要分组但不需要捕获时,使用 (?:...)。这样更快,也不会污染捕获列表:

# 匹配 "Mr." 或 "Mrs." 或 "Ms.",不捕获称谓
(?:Mr|Mrs|Ms)\.\s+\w+

前瞻和后行断言

这些零宽断言匹配位置但不消耗字符:

# 正向前瞻:匹配 "foo" 仅当后面是 "bar"
foo(?=bar)

# 负向前瞻:匹配 "foo" 后面不是 "bar"
foo(?!bar)

# 正向后行:匹配 "bar" 仅当前面是 "foo"
(?<=foo)bar

# 负向后行:匹配 "bar" 前面不是 "foo"
(?<!foo)bar

实际示例:密码强度验证

# 至少 8 位,包含大写、小写、数字和特殊字符各一个
^(?=.*[a-z])(?=.*[A-Z])(?=.\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

每个前瞻断言强制一个约束条件,但不推进匹配位置。最后的字符类定义了允许的字符和最小长度。

标志(修饰符)

g  全局匹配 — 查找所有匹配项,不仅是第一个
i  不区分大小写
m  多行模式 — ^ 和 $ 匹配行边界
s  单行模式 — . 也匹配换行符
u  Unicode 支持(启用 \p{} 类)
x  详细模式 — 允许空白和注释

贪婪 vs 懒惰匹配

默认情况下,量词是贪婪的——它们尽可能多地匹配。加上 ? 使其变为懒惰匹配:

# 输入: <p>你好</p><p>世界</p>

# 贪婪(匹配过多)
<.*>     →  "<p>你好</p><p>世界</p>"

# 懒惰(匹配最少)
<.*?>    →  "<p>", 然后 "</p>", 然后 "<p>", 然后 "</p>"

在大多数情况下,提取标签和分隔符时,懒惰匹配才是你想要的。

常见错误

  1. 不转义特殊字符:使用 \. 匹配字面点号,\( 匹配字面括号。
  2. 用正则解析结构化数据:不要用正则表达式解析 HTML 或 JSON。使用专门的解析器。
  3. 灾难性回溯:嵌套量词如 (a+)+ 在不匹配的输入上可能导致挂起。使用原子组或占有型量词。
  4. 忘记锚点:没有 ^$,你的模式会匹配部分字符串。\d+ 匹配 "abc123"——^\d+$ 不会。

测试你的正则表达式

在部署正则表达式之前,一定要针对边界情况测试。我们的 正则表达式测试工具 提供实时匹配、分组高亮和替换预览——全部在浏览器中运行。

总结

正则表达式是一个强力工具:正确使用时极其有效,使用不当时非常危险。从简单模式开始,充分测试,只有在需要时才使用更复杂的结构。把这个速查表收藏起来,需要验证模式时就用 正则表达式测试工具

试试这个工具?

打开工具 →