跳到正文
ZH

学习 · 速查表

日常代码正则速查表

覆盖大多数真实匹配场景的二十个模式与标志位,附可以直接复制的示例。

字符类

模式 匹配对象
\d 一位数字(0-9)
\w 一个单词字符(A-Za-z0-9_)
\s 空白字符
. 除换行外的任意字符(加 s 标志时:任意字符)
[abc] a、b、c 中的任意一个
[^abc] 除这些以外的任何字符

量词

模式 含义
a* 零个或多个
a+ 一个或多个
a? 零个或一个
a{2,4} 两到四个
a{2,} 两个或更多

分组与或运算

  • (abc) —— 捕获组(替换时用 $1、$2……)。
  • (?:abc) —— 非捕获组。
  • a|b —— 或运算(「a 或 b」)。
  • (?<name>…) —— 命名组。

锚点与边界

  • ^ 字符串开头(加 m 时:行首)。
  • $ 字符串结尾(加 m 时:行尾)。
  • \b 单词边界 —— \bcat\b 能匹配 "cat",但不匹配 "category"。

标志位

  • g —— 全局(找到全部,matchAll 需要它)。
  • i —— 忽略大小写。
  • m —— 多行(^/$ 按行生效)。
  • s —— 点号也匹配换行。
  • u —— unicode 模式(启用 \p{…})。

日常模式

用途 模式
邮箱(实用版) ^[^\s@]+@[^\s@]+\.[^\s@]+$
日期 YYYY-MM-DD ^\d{4}-\d{2}-\d{2}$
Slug ^[a-z0-9]+(?:-[a-z0-9]+)*$
十六进制颜色 ^#?[0-9a-fA-F]{6}$
开头/结尾空格 `^\s+
提取数字 \d+ 配 g

用分组做替换

"2026-09-09".replace(/(\d{4})-(\d{2})-(\d{2})/, "$3/$2/$1")
// "09/09/2026"

贪婪与懒惰

量词默认是贪婪的:a.+b 对上 a1b2b 会匹配整个 a1b2b,取到最后一个可能的 b。加上 ? 就变成懒惰匹配,a.+?b 匹配最短的那个 a1b。当你发现某个模式匹配得太多时,先怀疑贪婪,再怀疑你的字符类。

常见错误

  • 忘了 g 标志。 "aaa".match(/a/) 返回一个匹配;加上 g 会返回全部三个。工具和语言在这上面的行为常常不同。
  • 没转义的点号。 . 匹配任意字符。要匹配域名或文件名里的字面点号,写 \.。
  • 锚点太松。 /\d{4}/ 会在字符串的任意位置匹配。要做整串匹配检查,就用 ^…$ 包起来。
  • 灾难性回溯。 (a+)+ 这类嵌套量词碰上长字符串能卡死页面。嵌套要保持浅,并且在上线到校验热路径之前,先用正则测试器拿最坏输入测一遍。

动手练

上面每个模式都先在 ToolsKit 的 正则测试器 里验证,再放进代码里信任它。要拿你真正会校验的真实样本来构造模式,而不是只跑顺利路径,一个难缠的输入顶得上十个干净输入。