2012-11-13 57 views
0

我正在玩一些正则表达式,在查看我的一些匹配时,我开始好奇为什么exec函数会产生尽可能多的结果。RegExp.exec如何填充其结果数组

我只是寻求操作的内部运作一个澄清一下,这样我可以感觉更舒服为什么一个正则表达式返回ñ结果,而不是只接受以为然。

Ex。

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] 

在上面的例子中,我得到它为什么匹配“邮政编码或城市&国家”,但我不知道为什么有一个未定义的值正在生产第二匹配。

在此先感谢。

回答

1

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

  • ​​—完全匹配的子字符串。
  • undefined —由(\\s\\(Optional\\)|$)capture-group捕获的子字符串。或而不是捕获,在这种情况下,因为该捕获组是在一个不匹配的交替和内。

为了除去后者,则可以(大概)改变((?:,将其标记为非捕获基团。

要检索后续匹配,您可能需要多次拨打exec