我刚刚遇到了同样的问题。
如果包含匹配组(括号中)和“g”(全局)修饰符,则结果中只会出现两次文本。第一项始终是第一个结果,在短字符串上使用 match(reg) 时通常可以,但是当使用如下结构时:
while ((result = reg.exec(string)) !== null){
console.log(result);
}
结果有点不同。
试试下面的代码:
var regEx = new RegExp('([0-9]+ (cat|fish))','g'), sampleString="1 cat and 2 fish";
var result = sample_string.match(regEx);
console.log(JSON.stringify(result));
// ["1 cat","2 fish"]
var reg = new RegExp('[0-9]+ (cat|fish)','g'), sampleString="1 cat and 2 fish";
while ((result = reg.exec(sampleString)) !== null) {
console.dir(JSON.stringify(result))
};
// '["1 cat","cat"]'
// '["2 fish","fish"]'
var reg = new RegExp('([0-9]+ (cat|fish))','g'), sampleString="1 cat and 2 fish";
while ((result = reg.exec(sampleString)) !== null){
console.dir(JSON.stringify(result))
};
// '["1 cat","1 cat","cat"]'
// '["2 fish","2 fish","fish"]'
(在最近的 V8 上测试 - Chrome、Node.js)
目前最好的答案是我无法投票的评论,因此请归功于@Mic。