代码之家  ›  专栏  ›  技术社区  ›  Peter Ajtai

如何在Javascript正则表达式中使用未捕获的元素?

  •  3
  • Peter Ajtai  · 技术社区  · 14 年前

    我想抓住 thing 在里面 nothing 全局性和不区分大小写。

    "Nothing thing nothing".match(/no(thing)/gi);
    

    jsFiddle

    捕获的阵列是 Nothing,nothing 而不是 thing,thing

    parentheses delimit the matching pattern ? 我做错什么了?

    ( 是的,我知道这也会匹配的 nothingness )

    3 回复  |  直到 14 年前
        1
  •  5
  •   Peter Ajtai    14 年前

    如果使用全局标志,则 match

    要从每个匹配中获取所有组,请循环:

    var match;
    while(match = /no(thing)/gi.exec("Nothing thing nothing")) 
    { 
      // Do something with match
    }
    

    ["Nothing", "thing"] ["nothing", "thing"] .

        2
  •  1
  •   Alan Moore Chris Ballance    14 年前

    不管是括号还是否,都会捕获整个匹配的子字符串——将其视为默认的捕获组。怎么回事

    您链接到的教程确实在标题“pattern delimiters”下列出了分组构造,但这是错误的,实际的描述也不是更好:

    (pattern), (?:pattern) 匹配整个包含的模式。

    当然,他们会匹配它(或尝试)!但这是怎么回事 你要做的就是治疗整个病人 附属的

    (?:foo){3}  // "foofoofoo"
    

    (?:...) 是纯分组构造,而 (...)

    仅仅快速浏览一下,我就发现了更多不准确、模棱两可或不完整描述的例子。我建议您立即取消该教程的书签,并将其改为书签: regular-expressions.info .

        3
  •  0
  •   Topera    14 年前

    括号在此正则表达式中不起任何作用。

    正则表达式 /no(thing)/gi 与相同 /nothing/gi .

    所以,这个正则表达式只能找到这个序列n-o-t-h-i-n-g。这个词 thing 不以“否”开头,因此不匹配。


    更改为 /(no)?thing/gi 会有用的。 会工作因为()?表示可选零件。