2012-11-13 55 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