主题
🧩 JavaScript 正则表达式
基础语法
创建方式
js
// 字面量
const regex1 = /abc/
// 构造函数
const regex2 = new RegExp('abc')基本匹配
abc→ 匹配 "abc".→ 匹配任意一个字符(不含换行,除非s标志开启)\d→ 数字 [0-9]\w→ 单词字符 [a-zA-Z0-9_]\s→ 空白符(空格、换行、制表符)
对应的 反义:
\D→ 非数字\W→ 非单词字符\S→ 非空白符
锚点(Anchors)
^→ 行首$→ 行尾\b→ 单词边界\B→ 非单词边界
示例:
js
/^abc/.test("abc123") // true
/abc$/.test("123abc") // true
/\bcat\b/.test("cat dog") // true字符类(Character Classes)
[abc]→ 匹配 a 或 b 或 c[^abc]→ 匹配除了 a、b、c 以外的任意字符[a-z]→ 匹配小写字母[0-9]→ 匹配数字
量词(Quantifiers)
a*→ 0 次或多次a+→ 1 次或多次a?→ 0 或 1 次a{3}→ 恰好 3 次a{2,}→ 至少 2 次a{2,5}→ 2 到 5 次
贪婪与惰性
js
/.+/.exec("aaa") // 贪婪 → "aaa"
/.+?/.exec("aaa") // 惰性 → "a"分组与捕获
(abc)→ 捕获组(?:abc)→ 非捕获组(?<name>abc)→ 命名捕获组(ES2018+)\1,\2→ 反向引用
示例:
js
const m = /(\d{4})-(\d{2})-(\d{2})/.exec('2025-08-16')
console.log(m[1]) // 2025
console.log(m[2]) // 08
console.log(m[3]) // 16选择(Alternation)
js
;/(cat|dog)/.test('dog') // true前后预查(Lookahead & Lookbehind)
ES2018 引入
- 正向先行断言:
X(?=Y)→ X 后必须跟 Y - 正向否定断言:
X(?!Y)→ X 后不能跟 Y - 反向先行断言:
(?<=Y)X→ X 前必须有 Y - 反向否定断言:
(?<!Y)X→ X 前不能有 Y
示例:
js
/\d+(?=px)/.exec("100px") // 100
/(?<=\$)\d+/.exec("$99") // 99标志位(Flags)
g→ 全局匹配i→ 忽略大小写m→ 多行模式(^ 和 $ 匹配行首行尾)s→ dotAll 模式(.匹配换行)u→ Unicode 模式(支持 emoji)y→ sticky 粘连模式(从 lastIndex 开始匹配)
示例:
js
;/hello/gi.test('HELLO') // true常用方法
String 方法
js
'abc123'.match(/\d+/) // ["123"]
'abc123'.matchAll(/\d+/g) // 迭代器
'abc123'.replace(/\d/, '#') // "abc#23"
'abc123'.split(/\d+/) // ["abc", ""]RegExp 方法
js
const re = /\d+/g
re.test('123') // true
re.exec('123 456') // ["123"], 再次调用匹配 "456"