frontend Cheatsheet
正则表达式速查表
正则表达式语法一页速查:字符类、量词、锚点、分组与捕获、零宽断言和常用正则模式,覆盖 grep/sed/awk/JavaScript/Python 等场景的高频用法。
把正则表达式最常用的元字符、量词、分组和断言整理成速查表,写正则时对照查不用记。
字符类 Character Class
- 匹配任意单个字符(不含换行符,除非 /s 标志)
. - 数字 / 非数字,等价于 [0-9] / [^0-9]
\d \D - 单词字符 / 非单词字符,等价于 [a-zA-Z0-9_] / [^a-zA-Z0-9_]
\w \W - 空白 / 非空白(空格、Tab、换行等)
\s \S - 单词边界 / 非单词边界(零宽匹配)
\b \B - 匹配 a、b 或 c 中任意一个
[abc] - 匹配除 a、b、c 外的任意字符
[^abc] - 匹配 a 到 z 范围内的字符
[a-z]
量词 Quantifier
- 匹配 0 次或多次(贪婪)
* - 匹配 1 次或多次(贪婪)
+ - 匹配 0 次或 1 次(可选)
? - 恰好匹配 n 次
{n} - 至少匹配 n 次
{n,} - 匹配 n 到 m 次
{n,m} - 惰性匹配(非贪婪),尽可能少匹配
*? +? ??
锚点与分支 Anchor & Alternation
- 匹配行首(多行模式下匹配每行开头)
^ - 匹配行尾
$ - 字符串开头 / 结尾(Python,不受多行模式影响)
\A \Z - 匹配 a 或 b
a|b - 分组中的分支,匹配 abc 或 xyz
(abc|xyz)
分组与捕获 Group & Capture
- 捕获分组,可反向引用 \1
(pattern) - 非捕获分组,不保存匹配结果
(?:pattern) - 命名捕获组(Python 语法),JS 用 (?<name>pattern)
(?P<name>pattern) - 反向引用第 n 个捕获组
\1 \2 - 正向先行断言(后面要匹配 pattern)
(?=pattern) - 负向先行断言(后面不匹配 pattern)
(?!pattern) - 正向后行断言(前面已匹配 pattern)
(?<=pattern) - 负向后行断言(前面不匹配 pattern)
(?<!pattern)
常用模式 Common Patterns
- 日期格式 YYYY-MM-DD
^\d{4}-\d{2}-\d{2}$ - IPv4 地址(简化版,未校验范围)
^\d{1,3}(\.\d{1,3}){3}$ - 邮箱地址(简化版)
^[\w.-]+@[\w.-]+\.\w+$ - HTTP/HTTPS URL 开头
^https?://[\w.-]+ - 从文本中提取所有 IPv4 地址
\b\d+\.\d+\.\d+\.\d+\b - 匹配双引号字符串(不含转义)
"[^"]*" - 十六进制颜色码 #RRGGBB
^#[0-9a-fA-F]{6}$
标志 Flag
- 全局匹配(找到所有匹配项)
g - 忽略大小写
i - 多行模式(^ 和 $ 匹配每行)
m - 单行模式(. 匹配换行符)
s - Unicode 模式(正确处理中文等)
u
容易踩的坑
- 贪婪匹配 .* 会尽可能多匹配,容易过度捕获,需要惰性匹配时用 .*?。
- grep 默认使用 BRE(基本正则),+、?、| 需转义或用 grep -E(ERE)。
- 命名捕获组语法不统一:Python (?P<name>),JavaScript/Java (?<name>),PHP/(?P<name>)。