【问题标题】:JavaScript RegExp - g modifier not workingJavaScript RegExp - g 修饰符不起作用
【发布时间】:2017-11-01 17:32:27
【问题描述】:

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

这是我的问题:

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

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

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

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

【问题讨论】:

  • 您必须重复RegExp.exec,直到返回值为null。或者,您可以使用 str.match(re),它只返回匹配数组。

标签: javascript regex jscript testcomplete


【解决方案1】:

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

var arr = str.match(objReg);

RegExp .exec() 函数与 g 标志的行为方式不同。标志 does.exec()something 但不是 .match() 所做的事情。

【讨论】:

  • 我非常感谢您,先生。这解决了我的问题:')。我会尽快接受答案
【解决方案2】:

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);

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2014-12-09
    • 2012-06-28
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2023-03-02
    • 2010-10-20
    相关资源
    最近更新 更多