0

我正在使用一些正则表达式,并且在查看我的一些匹配项时,我很好奇为什么 exec 函数会产生与它一样多的结果。

我只是想稍微澄清一下操作的内部工作原理,以便我对为什么正则表达式返回n 个结果感到更舒服,而不是仅仅接受它确实如此。

前任。

var invalidValues = new RegExp(
"\\bZIP or City & State$|" +
"\\bCity & State or ZIP$|" +
"\\bEm[ai][ia]l Address(\\s\\(Optional\\)|$)|" +
"^$", "gi"); 

invalidValues.exec("Zip or City & State");
//returns ["Zip or City & State", undefined]

在上面的示例中,我明白了为什么它匹配“邮编或城市和州”,但我不知道为什么会产生第二个匹配未定义的值。

提前致谢。

4

1 回答 1

1

我不熟悉 Proof General,但看起来exec一次只返回一个匹配项。您看到的结果是:

  • "Zip or City & State"— 完全匹配的子串。
  • undefined(\\s\\(Optional\\)|$) 捕获组捕获的子字符串。在这种情况下,或者捕获,因为该捕获组位于不匹配的交替项内。

要删除后者,您可以(大概)将 更改((?:,将其标记为非捕获组。

要检索后续匹配项,您可能需要exec多次调用。

于 2012-11-13T16:54:05.270 回答