看如下代码:
const regExp = /\dtt([^\d]*)88/g;
const str = '5tt第一88。。。8tt第二88';
const data = str.match(regExp);
console.log(data);
输出
为何没有匹配出括号内的捕获组?
引用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);
}
输出
参考:
developer.mozilla.org/zh-CN/docs/… www.codenong.com/38889331/