字符匹配
| 语法 | 描述 | 示例 |
|---|---|---|
| . | 匹配除换行符外的任意单个字符 | a.c 匹配 "abc", "a c" |
| [abc] | 匹配方括号中的任意一个字符 | [aeiou] 匹配元音字母 |
| [^abc] | 匹配不在方括号中的任意字符 | [^0-9] 匹配非数字字符 |
| [a-z] | 匹配指定范围内的字符 | [a-z] 匹配小写字母 |
| \ | 转义特殊字符 | \. 匹配 "." 字符 |
预定义字符类
| 语法 | 描述 | 等价于 |
|---|---|---|
| \d | 数字字符 | [0-9] |
| \D | 非数字字符 | [^0-9] |
| \w | 单词字符(字母、数字、下划线) | [a-zA-Z0-9_] |
| \W | 非单词字符 | [^a-zA-Z0-9_] |
| \s | 空白字符(空格、制表符、换行) | [ \t\n\r\f\v] |
| \S | 非空白字符 | [^ \t\n\r\f\v] |
量词
| 语法 | 描述 | 示例 |
|---|---|---|
| * | 匹配 0 次或多次 | a* 匹配 "", "a", "aa" |
| + | 匹配 1 次或多次 | a+ 匹配 "a", "aa" |
| ? | 匹配 0 次或 1 次 | colou?r 匹配 "color", "colour" |
| {n} | 匹配恰好 n 次 | \d{3} 匹配三个数字 |
| {n,} | 匹配至少 n 次 | \d{3,} 匹配至少三个数字 |
| {n,m} | 匹配 n 到 m 次 | \d{3,5} 匹配 3-5 个数字 |
锚点与边界
| 语法 | 描述 | 示例 |
|---|---|---|
| ^ | 匹配字符串开头 | ^Hello 匹配以 Hello 开头 |
| $ | 匹配字符串结尾 | world$ 匹配以 world 结尾 |
| \b | 匹配单词边界 | \bcat\b 匹配单词 "cat" |
| \B | 匹配非单词边界 | \Bcat\B 匹配 "cat" 不在边界 |
| \A | 匹配字符串开头(多行模式) | \AStart |
| \Z | 匹配字符串结尾(多行模式) | end\Z |
分组与引用
| 语法 | 描述 | 示例 |
|---|---|---|
| (...) | 捕获分组 | (\d{3})-(\d{4}) 捕获区号和号码 |
| (?:...) | 非捕获分组 | (?:www\.)? 匹配但不捕获 |
| (?<name>...) | 命名捕获分组 | (?<area>\d{3}) 命名分组 |
| \1, \2, ... | 反向引用分组 | (\w+) \1 匹配重复单词 |
| (?=...) | 正向肯定预查 | Windows(?=10) 匹配后跟 10 的 Windows |
| (?!...) | 正向否定预查 | Windows(?!10) 匹配后不跟 10 的 Windows |
修饰符(标志)
| 标志 | 描述 | 示例 |
|---|---|---|
| i | 忽略大小写 | /hello/i 匹配 "Hello", "HELLO" |
| g | 全局匹配(查找所有匹配) | /a/g 匹配所有 "a" |
| m | 多行模式(^ 和 $ 匹配每行) | /^start/m 匹配每行开头的 "start" |
| s | 单行模式(. 匹配换行符) | /a.b/s 匹配 "a\nb" |
| u | Unicode 模式 | /\p{L}/u 匹配 Unicode 字母 |
| y | 粘性匹配(从 lastIndex 开始) | /a/y 从指定位置匹配 |
常用正则表达式示例
电子邮件地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
验证标准的电子邮件地址格式
✓ user@example.com
✓ user.name@example.co.uk
✗ user@example
✗ @example.com
手机号码
^1[3-9]\d{9}$
验证中国大陆11位手机号码
✓ 13812345678
✓ 13987654321
✗ 12345678901
✗ 1381234567
日期 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
验证 YYYY-MM-DD 格式的日期
✓ 2023-12-25
✓ 2023-02-28
✗ 2023-13-01
✗ 23-12-25
提取所有 URL
https?://[^\s/$.?#].[^\s]*
从文本中提取所有 HTTP/HTTPS URL
✓ https://www.example.com
✓ http://example.com/path
✗ www.example.com
✗ example.com
提取所有 #标签
#(\w+)
从文本中提取所有 # 开头的标签
✓ #正则表达式
✓ #JavaScript
✗ 正则表达式
✗ ##双标签
提取金额
¥\s*\d+(?:\.\d{2})?
提取人民币金额,支持 ¥ 符号
✓ ¥100
✓ ¥99.99
✗ $100
✗ 100元
隐藏手机号中间四位
(\d{3})\d{4}(\d{4})
将手机号中间四位替换为 *
✓ 13812345678 → 138****5678
✓ 13987654321 → 139****4321
✗ 12345678901 (格式错误)
删除 HTML 标签
<[^>]+>
删除文本中的所有 HTML 标签
✓ <div>内容</div> → 内容
✓ <p class="text">段落</p> → 段落
移除多余空格
\s+
将多个连续空格替换为单个空格
✓ "a b c" → "a b c"
✓ "正则 表达式" → "正则 表达式"
前后单词交换
(\w+)\s+(\w+)
将两个单词的位置交换
✓ "Hello World" → "World Hello"
✓ "正则 表达式" → "表达式 正则"
匹配嵌套结构
\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\)
匹配最外层括号内的内容
✓ (a(b)c) → (a(b)c)
✓ (a(b(c)d)e) → (a(b(c)d)e)
✗ a(b)c
字母顺序重排
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}
强密码验证:大小写字母、数字、特殊字符
✓ Password123!
✓ Abc123@#$
✗ password123
✗ PASSWORD123
下载正则表达式速查表
下载这份正则表达式语法速查表,方便离线查阅