Skip to content

🧩 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"

在线调试工具

基于 MIT 许可发布