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

javascript regexp未返回全局结果

  •  14
  • StefanHayden  · 技术社区  · 15 年前

    我的理解是,下面这三行都应该返回一个包含2个结果的数组。然而,无论regex在字符串中重复多少次,regexp只返回1个结果。

    有人能解释为什么吗?或许我可以建议如何让regexp提供全局结果?

    //INTPUT: 
        console.log(new RegExp("New York", "gi").exec("New York New York")); 
    
    //OUTPUT: 
    ["New York"]
    
    //INTPUT: 
        console.log(new RegExp(/New York/gi).exec("New York New York"));
    
    //OUTPUT: 
    ["New York"]
    
    //INTPUT: 
        console.log("New York New York".match(/New York/gi));
    
    //OUTPUT:
    ["New York", "New York"]
    
    2 回复  |  直到 15 年前
        1
  •  21
  •   Rob Fonseca-Ensor    15 年前

    第三个示例是获取匹配数组的最佳方法。

    regexp.exec实际记住其位置,并返回后续调用的下一个结果:

    >>> var v = /new york/gi
    >>> v.exec("NEW YORK new york")
    ["NEW YORK"]
    >>> v.exec("NEW YORK new york")
    ["new york"]
    >>> v.exec("NEW YORK new york")
    null
    
        2
  •  12
  •   Derek Swingley    15 年前

    这是预期的,exec()返回一个匹配项,但提供有关匹配项的更多信息,而不是match()。如果只需要所有匹配项,请使用match()。从 JavaScript: The Definitive Guide :

    调用match()返回一个数组 通过全局 经常性支出。() 相反,总是返回一个 匹配并提供完整 关于那场比赛的信息。什么时候? 对正则调用exec()。 具有g标志的epSession,它设置 匹配项的LastIndex属性 子串。当调用exec()时, 第二次同样的常规赛 表达式,它的搜索开始于 字符位置由 LastIndex属性。