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);
我已经在这个 愚蠢的 问题上停留了几个小时了。我知道这看起来很愚蠢,但我真的不知道我错过了什么。任何帮助将不胜感激。
这是我的问题:
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);