正则✅
JavaScript 支持哪些正则能力?
答案
核心概念
- 标志位:
i/g/m/s/u/y
控制匹配行为(大小写、全局、多行、dotAll、Unicode、黏连) - 常用元字符与字符类:
. \d \w \s
以及自定义[ ]
、排除[^ ]
- 边界:
^ $ \b
,多行模式下行首行尾 - 分组与捕获:
()
、命名捕获(?<name>pattern)
、反向引用\1
与$<name>
- 断言:前瞻
(?=…) / (?!…)
,后顾(?<=…)/(?!<…)
- flags
Tests
说一下 JS RegExp 与 String 的常用方法及差异
答案
核心要点
- RegExp:test/exec;String:match/matchAll/replace/replaceAll/split
- g 标志影响 match/matchAll 返回值与 exec 的 lastIndex
- replace 支持分组回填
$1
、命名捕获$<name>
- methods
Tests
分组/命名捕获/反向引用怎么用?
答案
核心要点
- 位置分组 () 通过下标访问;命名捕获通过 groups 访问
- 反向引用用于去重、格式校验与替换重排
- groups
Tests
边界/多行/单词边界如何工作?
答案
核心要点
- ^/$ 在默认模式匹配整个字符串的首尾;m 模式作用于每行
- \b 用于单词边界匹配(字母数字与非字母数字之间)
- boundaries
Tests
前瞻/后顾断言的应用场景?
答案
核心要点
- 不消费字符的条件匹配:
(?=…)/(?!…)
与(?<=…)/(?<!…)
- 常用于前后缀定位、金额提取、复杂条件过滤
- lookaround
Tests
数字千分位
答案
核心要点
- 使用零宽断言模式:
\B(?=(\d{3})+(?!\d))
对整数部分分组 - 注意负号与小数部分保留
- impl
Tests
url 查询字段解码
答案
核心要点
- 解析
?
之后的查询串,支持重复 key → 数组 - 对
+
视为空格,配合 decodeURIComponent 解码
- impl
Tests