frontend Cheatsheet

正则表达式速查表

正则表达式语法一页速查:字符类、量词、锚点、分组与捕获、零宽断言和常用正则模式,覆盖 grep/sed/awk/JavaScript/Python 等场景的高频用法。

把正则表达式最常用的元字符、量词、分组和断言整理成速查表,写正则时对照查不用记。

正则regex文本处理模式匹配

字符类 Character Class

  • .
    匹配任意单个字符(不含换行符,除非 /s 标志)
  • \d \D
    数字 / 非数字,等价于 [0-9] / [^0-9]
  • \w \W
    单词字符 / 非单词字符,等价于 [a-zA-Z0-9_] / [^a-zA-Z0-9_]
  • \s \S
    空白 / 非空白(空格、Tab、换行等)
  • \b \B
    单词边界 / 非单词边界(零宽匹配)
  • [abc]
    匹配 a、b 或 c 中任意一个
  • [^abc]
    匹配除 a、b、c 外的任意字符
  • [a-z]
    匹配 a 到 z 范围内的字符

量词 Quantifier

  • *
    匹配 0 次或多次(贪婪)
  • +
    匹配 1 次或多次(贪婪)
  • ?
    匹配 0 次或 1 次(可选)
  • {n}
    恰好匹配 n 次
  • {n,}
    至少匹配 n 次
  • {n,m}
    匹配 n 到 m 次
  • *? +? ??
    惰性匹配(非贪婪),尽可能少匹配

锚点与分支 Anchor & Alternation

  • ^
    匹配行首(多行模式下匹配每行开头)
  • $
    匹配行尾
  • \A \Z
    字符串开头 / 结尾(Python,不受多行模式影响)
  • a|b
    匹配 a 或 b
  • (abc|xyz)
    分组中的分支,匹配 abc 或 xyz

分组与捕获 Group & Capture

  • (pattern)
    捕获分组,可反向引用 \1
  • (?:pattern)
    非捕获分组,不保存匹配结果
  • (?P<name>pattern)
    命名捕获组(Python 语法),JS 用 (?<name>pattern)
  • \1 \2
    反向引用第 n 个捕获组
  • (?=pattern)
    正向先行断言(后面要匹配 pattern)
  • (?!pattern)
    负向先行断言(后面不匹配 pattern)
  • (?<=pattern)
    正向后行断言(前面已匹配 pattern)
  • (?<!pattern)
    负向后行断言(前面不匹配 pattern)

常用模式 Common Patterns

  • ^\d{4}-\d{2}-\d{2}$
    日期格式 YYYY-MM-DD
  • ^\d{1,3}(\.\d{1,3}){3}$
    IPv4 地址(简化版,未校验范围)
  • ^[\w.-]+@[\w.-]+\.\w+$
    邮箱地址(简化版)
  • ^https?://[\w.-]+
    HTTP/HTTPS URL 开头
  • \b\d+\.\d+\.\d+\.\d+\b
    从文本中提取所有 IPv4 地址
  • "[^"]*"
    匹配双引号字符串(不含转义)
  • ^#[0-9a-fA-F]{6}$
    十六进制颜色码 #RRGGBB

标志 Flag

  • g
    全局匹配(找到所有匹配项)
  • i
    忽略大小写
  • m
    多行模式(^ 和 $ 匹配每行)
  • s
    单行模式(. 匹配换行符)
  • u
    Unicode 模式(正确处理中文等)

容易踩的坑

  • 贪婪匹配 .* 会尽可能多匹配,容易过度捕获,需要惰性匹配时用 .*?。
  • grep 默认使用 BRE(基本正则),+、?、| 需转义或用 grep -E(ERE)。
  • 命名捕获组语法不统一:Python (?P<name>),JavaScript/Java (?<name>),PHP/(?P<name>)。