代码之家  ›  专栏  ›  技术社区  ›  Yosi

javascript正则表达式-g修饰符不起作用[重复]

  •  1
  • Yosi  · 技术社区  · 14 年前

    我有以下代码:

    var str = "4 shnitzel,5 ducks";
    var rgx = new RegExp("[0-9]+","g");
    console.log( rgx.exec(str) );
    

    Chrome和火狐的输出是 ["4"] .

    为什么我不知道结果呢 ["4","5"] ?

    2 回复  |  直到 11 年前
        1
  •  6
  •   Gumbo    14 年前

    exec 只搜索下一个匹配项。您需要多次调用它以获取所有匹配项:

    如果正则表达式使用“g”标志,则可以多次使用exec方法查找同一字符串中的连续匹配项。

    您可以这样做来查找所有匹配项 执行程序 :

    var str = "4 shnitzel,5 ducks",
        re = new RegExp("[0-9]+","g"),
        match, matches = [];
    while ((match = re.exec(str)) !== null) {
        matches.push(match[0]);
    }
    

    或者你只是使用 match method 在字符串'str:

    var str = "4 shnitzel,5 ducks",
        re = new RegExp("[0-9]+","g"),
        matches = str.match(re);
    

    顺便说一下:使用 RegExp literal syntax /…/ 可能更方便: /[0-9]+/g .

        2
  •  2
  •   RoToRa    14 年前

    exec() 总是只返回一个匹配项。您会得到更多的匹配,需要反复调用exec。

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec