正则match加g无法匹配捕获组?

733 阅读1分钟

看如下代码:

const regExp = /\dtt([^\d]*)88/g;
const str = '5tt第一88。。。8tt第二88';
const data = str.match(regExp);
console.log(data);

输出

20210702145219567.png

为何没有匹配出括号内的捕获组?

引用MDN中描述match返回值的一段话:

  • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
  • 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。

但是,如果我们想全局匹配符合特定要求的子串,怎么办?

通过 exec

const regExp = /\dtt([^\d]*)88/g;
const str = '5tt第一88。。。8tt第二88';
// const data = str.match(regExp);
// console.log(data);
let arr = [];
while(arr = regExp.exec(str)) {
  console.log(arr);
}

输出

image.png

参考:

developer.mozilla.org/zh-CN/docs/… www.codenong.com/38889331/