RegExp.exec如何填充其结果数组

时间:2012-11-13 16:43:03

标签: regex proof-general

我正在玩一些正则表达式,在看一些我的比赛时,我很好奇为什么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]

在上面的例子中,我得到了为什么它匹配“Zip或City& State”,但我不知道为什么第二场比赛正在产生一个未定义的值。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

  • "Zip or City & State" - 完整匹配的子字符串。
  • undefined - (\\s\\(Optional\\)|$) capture-group捕获的子字符串。或者 not 捕获,在这种情况下,因为捕获组位于不匹配的替换组内。

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

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