正则表达式速查表
最后更新
字符类
从一组字符中匹配单个字符。
| 符号 | 匹配 |
|---|---|
. | 除换行符以外的任意字符 |
\d | 任意数字(0 到 9) |
\D | 任意非数字字符 |
\w | 单词字符(字母、数字、下划线) |
\W | 任意非单词字符 |
\s | 任意空白字符(空格、制表符、换行符) |
[abc] | a、b、c 中的任意一个 |
[a-z] | 该范围内的任意小写字母 |
[^abc] | 除 a、b、c 以外的任意字符 |
量词
指定前一个符号重复的次数。
| 符号 | 匹配 |
|---|---|
* | 零次或多次 |
+ | 一次或多次 |
? | 零次或一次(可选) |
{3} | 正好 3 次 |
{2,4} | 2 到 4 次 |
{2,} | 2 次或更多 |
*? | 非贪婪:尽可能少 |
+? | 非贪婪:至少一次,尽量少 |
锚点与边界
匹配的是位置,而不是字符。
| 符号 | 匹配 |
|---|---|
^ | 字符串(或行)的开头 |
$ | 字符串(或行)的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
^abc$ | 恰好等于 abc 的字符串 |
\bword\b | 作为完整单词的 word |
分组与捕获
把多个符号组合起来,并捕获它们匹配到的内容。
| 符号 | 匹配 |
|---|---|
(abc) | 捕获组,保存为第 1 组 |
(?:abc) | 非捕获组 |
(?<year>\d{4}) | 名为 year 的命名捕获组 |
(ab)+ | 重复整个分组 |
\1 | 对第 1 组的反向引用 |
\k<year> | 对命名分组的反向引用 |
选择
匹配这个模式或那个模式。
| 符号 | 匹配 |
|---|---|
a|b | a 或 b |
cat|dog | 单词 cat 或 dog |
(jpg|png|gif) | 几个选项中的任意一个,并捕获 |
gr(a|e)y | gray 或 grey |
^(yes|no)$ | 恰好是 yes 或恰好是 no |
环视
断言前面或后面是什么内容,但不消耗字符。
| 符号 | 匹配 |
|---|---|
(?=abc) | 正向先行断言:后面紧跟 abc |
(?!abc) | 负向先行断言:后面不是 abc |
(?<=abc) | 正向后行断言:前面是 abc |
(?<!abc) | 负向后行断言:前面不是 abc |
\d+(?= dollars) | 只匹配后面跟着 dollars 的数字 |
(?<=\$)\d+ | 只匹配前面是 $ 的数字 |
修饰符
改变整个模式的匹配方式。
| 修饰符 | 作用 |
|---|---|
g | 全局:找出所有匹配,而不只是第一个 |
i | 忽略大小写 |
m | 多行:^ 和 $ 匹配每一行的开头和结尾 |
s | dotall:. 也能匹配换行符 |
u | Unicode 模式 |
x | 扩展模式:忽略模式中的空白 |
常用模式
日常校验中拿来就能改的现成模式。
| 模式 | 匹配 |
|---|---|
^\d+$ | 整数(只有数字) |
^[\w.+-]+@[\w-]+\.[\w.-]+$ | 基本的邮箱地址 |
https?:\/\/[^\s]+ | http 或 https 网址 |
^\d{4}-\d{2}-\d{2}$ | 形如 2026-05-27 的日期 |
^\d{3}-\d{3}-\d{4}$ | 美国电话号码 |
^#?[0-9a-fA-F]{6}$ | 6 位十六进制颜色值 |
\s+ | 一个或多个空白字符 |
常用的正则表达式符号,全都在这一页。这份正则表达式速查表是编写正则的快速参考:字符类、量词、锚点、分组、选择、环视和修饰符。
这里的语法遵循大多数语言通用的 PCRE / JavaScript 风格。你可以直接复制某个模式,也可以在正则测试工具里实时试一试,准确看到它匹配了什么,旁边一键就能打开 JS 在线编辑器。
正则表达式速查表常见问题
这份正则表达式速查表免费吗?
免费。这份正则表达式速查表完全免费,无需注册。收藏起来,需要查某个符号、量词或修饰符时随时回来看。
贪婪量词和非贪婪量词有什么区别?
* 和 + 这样的贪婪量词会尽可能多地匹配,如果模式的其余部分需要,再把字符让出来。非贪婪量词在后面加一个 ?(例如 *? 或 +?),会尽可能少地匹配,只在不得不时才扩展。比如对 <a><b> 来说,模式 <.+> 会贪婪地匹配整个字符串,而 <.+?> 只匹配 <a>。正则表达式中的捕获组是什么?
捕获组是用圆括号包起来的一部分模式,比如
(\d{4}),它匹配到的文本会被保存并编号,方便你复用或提取。之后可以用 \1 这样的反向引用来引用它,也可以写成 (?<year>\d{4}) 给它起个名字,更清楚。如果只想分组而不捕获,就用非捕获组 (?:...)。可以在线练习正则表达式吗?
可以。打开正则测试工具,输入一个模式,就能在浏览器里实时看到它在你自己的文本中匹配了什么。你也可以把任意模式放进 JS 在线编辑器,在代码里使用。想要系统学习的话,Coddy 的免费交互式课程会一步步讲解这些基础知识。
这份速查表适合初学者吗?
适合。内容从字符类和量词(基础)一直讲到环视和现成的模式,你可以马上开始匹配简单的文本,再逐步掌握高级表达式。