jinliming2
2021-04-20 23:00:16 +08:00
1. match 只返回匹配到的第一条结果,其中 [0] 为匹配到的整个字符串,[1] 为第一个括号捕获组,[2] 为第二个括号捕获组,以此类推。
2. js 的正则 /.../ 只能匹配第一个匹配结果,需要匹配所有结果的话,需要添加 g 标识:/.../g 。但是当你添加 g 标识之后,match 函数就只能返回所有匹配到的字符串了,而丢失了捕获组信息。
3. ES2020 新出了个 res.matchAll() 函数,返回一个迭代器,使用 [...res.matchAll(/.../g)] 即可得到和 python 的 findall 类似的结果,但是区别是 [0] 还是匹配到的整个字符串,[1] 才是第一个括号捕获组。但是更推荐的是使用 for (const m of res.matchAll(/.../g)) { ... } 去循环处理每一个匹配结果。
4. 如果执行环境较旧,没有 matchAll 函数的话。js 的正则是一个对象,内部会保存匹配进度信息。正则对象有一个 exec 方法。所以,可以这样来模拟 res.matchAll 的效果:
const reg = /.../g;
let result;
while (result = reg.exec(res)) {
// 处理 result
}