我正在玩一些正则表达式,在看一些我的比赛时,我很好奇为什么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”,但我不知道为什么第二场比赛正在产生一个未定义的值。
提前致谢。
答案 0 :(得分:1)
我不熟悉Proof General,但看起来好像exec
一次只返回单个匹配。您看到的结果是:
"Zip or City & State"
- 完整匹配的子字符串。undefined
- (\\s\\(Optional\\)|$)
capture-group捕获的子字符串。或者 not 捕获,在这种情况下,因为捕获组位于不匹配的替换组内。要删除后者,您可以(可能)将(
更改为(?:
,将其标记为非捕获组。
要检索后续匹配,您可能需要多次调用exec
。