JavaScript RegExp - g修饰符不起作用

Man*_*oey 4 javascript regex testcomplete jscript

我已经被困在这个愚蠢的问题上好几个小时了.我知道这似乎很愚蠢,但我真的不知道我错过了什么.任何帮助,将不胜感激.

这是我的问题:

var objReg = /touch/g;
var str = "abc touch def touch";
var arr = objReg.exec(str);
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以指导我在这里做什么?

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

在此输入图像描述

lla*_*ama 6

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);
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 5

要获得所需的效果,您需要进行以下匹配String.prototype.match():

var arr = str.match(objReg);
Run Code Online (Sandbox Code Playgroud)

.exec()对于g标志,RegExp 函数的行为方式不同.国旗确实做了什么,.exec()但没有做什么.match().