JavaScript 正则表达式 - g 修饰符不起作用

JavaScript RegExp - g modifier not working

我已经在这个 愚蠢的 问题上停留了几个小时了。我知道这看起来很愚蠢,但我真的不知道我错过了什么。任何帮助将不胜感激。

这是我的问题:

var objReg = /touch/g;
var str = "abc touch def touch";
var arr = objReg.exec(str);

我希望数组 arr 包含 2 个元素,但它只包含第一个元素,即使我确保放置了 g 修饰符。

谁能指导我这里要做什么?

调试:如下图,数组只有1个元素(index=0)

要得到你想要的效果,你需要和String.prototype.match()做匹配:

var arr = str.match(objReg);

RegExp .exec() 函数与 g 标志的行为方式不同。标志确实.exec()做了某事,但不是.match()所做的。

g 修饰符使正则表达式对象保持状态。它跟踪最后一场比赛后的索引。如果你想使用.exec(),你可以使用循环,它会在适当的点自动开始搜索字符串。

var objReg = /touch/g;
var str = "abc touch def touch";
var match = null;
var arr = [];

console.log(objReg.lastIndex);

while ((match = objReg.exec(str))) {
  arr.push(match[0]);
  console.log(objReg.lastIndex);
}

console.log(objReg.lastIndex);

console.log(arr);