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]

上記の例では、「Zip or City & State」に一致する理由はわかりますが、未定義の値で 2 番目の一致が生成される理由はわかりません。

前もって感謝します。

4

1 に答える 1

1

私はProofGeneralに精通していませんが、一度に1つの一致execのみを返すように見えます。表示されている結果は次のとおりです。

  • "Zip or City & State"—完全に一致した部分文字列。
  • undefined(\\s\\(Optional\\)|$) —capture -groupによってキャプチャされたサブストリング。または、この場合、キャプチャグループが一致しないオルタナンド内にあるため、キャプチャされません。

後者を削除するには、(おそらく)をに変更し((?:、非キャプチャグループとしてマークすることができます。

exec後続の一致を取得するには、複数回呼び出す必要がある可能性があります。

于 2012-11-13T16:54:05.270 に答える