"每次写正则都要搜索语法,\b 是什么意思来着?前行断言的语法是 (?=) 还是 (?<=)?字符类里的连字符要转义吗?"——正则语法细节太多,记不住很正常。
本速查表按功能分类整理了所有常用正则语法,配合表格和示例,让你在需要时快速查阅。收藏本页,再也不用每次都去搜索引擎找答案。
01 字符类(Character Classes)
字符类用于匹配特定类别的字符。它们是正则表达式中最基础也最常用的组成部分。下表列出了所有常用字符类及其含义。
字符类速查表
| 语法 | 含义 | 示例 |
|---|---|---|
| . | 匹配除换行符外的任意字符 | a.c → abc, a1c, a-c |
| \d | 数字 [0-9] | \d{3} → 123, 456 |
| \D | 非数字 [^0-9] | \D+ → abc, hello |
| \w | 字母数字下划线 [a-zA-Z0-9_] | \w+ → hello_world |
| \W | 非字母数字下划线 | \W → @, #, !, 空格 |
| \s | 空白字符(空格、制表符、换行) | a\sb → "a b", "a\tb" |
| [abc] | 字符集合——匹配 a、b 或 c 中的任意一个 | [aeiou] → 匹配元音字母 |
| [^abc] | 否定字符集——匹配除 a、b、c 外的任意字符 | [^0-9] → 匹配非数字 |
| [a-z] | 字符范围——匹配 a 到 z 的小写字母 | [A-Za-z] → 所有英文字母 |
02 量词(Quantifiers)
量词控制前面的字符或组重复出现的次数。默认为贪婪模式(尽可能多匹配),在量词后加 ? 变为懒惰模式(尽可能少匹配)。
量词速查表
| 语法 | 含义 | 懒惰版本 |
|---|---|---|
| * | 零次或多次 | *? |
| + | 一次或多次 | +? |
| ? | 零次或一次 | ?? |
| {n} | 恰好 n 次 | — |
| {n,} | n 次或更多 | {n,}? |
| {n,m} | n 到 m 次 | {n,m}? |
03 锚点与边界(Anchors & Boundaries)
锚点不匹配字符本身,而是匹配字符之间的位置。它们用于限定匹配必须出现在特定位置(如行首、行尾、单词边界)。
锚点速查表
| 语法 | 含义 | 示例 |
|---|---|---|
| ^ | 行首(或字符串开头) | ^Hello → 仅匹配行首的 Hello |
| $ | 行尾(或字符串结尾) | world$ → 仅匹配行尾的 world |
| \b | 单词边界 | \bcat\b → 匹配 "cat" 但不匹配 "catch" |
| \B | 非单词边界 | \Bcat → 匹配 "scat" 中的 "cat" |
04 分组与断言(Groups & Assertions)
分组使用圆括号将多个字符组合为一个单元,可以用于重复、捕获或条件匹配。断言(也称零宽断言)用于匹配位置而非字符,不消耗字符串中的字符。
分组与断言速查表
| 语法 | 含义 | 示例 |
|---|---|---|
| (abc) | 捕获组 | (\d+)px → 捕获数字部分 |
| (?:abc) | 非捕获组 | (?:jpg|png) → 分组但不捕获 |
| (?<name>abc) | 命名捕获组 | (?<year>\d{4}) → groups["year"] |
| a|b | 或(交替) | cat|dog → 匹配 cat 或 dog |
| (?=abc) | 正向前行断言 | \d+(?=px) → 数字后面是 px 才匹配 |
| (?!abc) | 负向前行断言 | \d+(?!px) → 数字后面不是 px 才匹配 |
| (?<=abc) | 正向后行断言 | (?<=\$)\d+ → $ 后面的数字 |
| (?<!abc) | 负向后行断言 | (?<!\$)\d+ → 前面不是 $ 的数字 |
05 特殊序列与转义(Special Sequences)
正则表达式中有一些特殊字符具有特别含义。如果要匹配这些字符本身,需要用反斜杠 \ 转义。以下是需要注意的特殊字符和序列列表。
- 需要转义的特殊字符:. * + ? ^ $ { } [ ] ( ) | \
- \n — 换行符
- \t — 制表符(Tab)
- \r — 回车符
- \0 — 空字符(null)
- \uXXXX — Unicode 字符(如 \u4e2d 匹配"中")
- \p{Script=Han} — Unicode 属性匹配(需 u 标志,匹配中文)
常见问题
\d 和 [0-9] 有什么区别?
在 JavaScript 中,\d 默认等价于 [0-9]。但在启用 Unicode 模式(u 标志)的某些引擎中,\d 可能匹配其他语言的数字字符(如阿拉伯数字 ٣)。如果只想匹配 0-9,建议明确使用 [0-9]。
如何匹配中文字符?
推荐使用 Unicode 属性匹配:/\p{Script=Han}/u。传统方法是 [\u4e00-\u9fa5],但这只覆盖了 CJK 统一汉字基本区,可能遗漏扩展区的汉字。Unicode 属性匹配更准确全面。
前行断言和后行断言有什么限制?
在 JavaScript(ES2018+)中,前行和后行断言都被完整支持。但在某些旧引擎或语言中,后行断言可能不支持可变长度模式。Suried Regex 测试器使用现代 JavaScript 引擎,支持所有断言语法。
正则表达式里 ^ 有两种含义吗?
是的。在字符类 [...] 外面,^ 表示行首锚点;在字符类 [...] 里面且在开头位置,^ 表示否定(取反)。例如 ^abc 匹配行首的 "abc",而 [^abc] 匹配除 a、b、c 外的任意字符。
这张速查表涵盖了所有正则语法吗?
本表涵盖了 95% 以上日常开发中需要的正则语法。一些高级特性如条件匹配 (?(1)a|b)、原子组 (?>...)、递归模式等属于 PCRE 扩展,JavaScript 原生不支持,因此未列入。