0

私は次の正規表現を持っています:

var match = str.match(/^[^,]*,[^,]*,.*$/mg);

次のような複数行のエントリをカバーするには

1234,john smith, john
4321, john smith2, jack, william@ab.com
8765, daniel, smith, rocks

次のデモ リンクでは、私の例のブロック全体 (3 行すべて) を貼り付けると、3 つの個別のアラートが表示され、毎回 1 行でアラートが表示されます。

http://jsfiddle.net/TCMcp/2/

ただし、どういうわけか、次のような2つの列を持つエントリに対して同じ正規表現を試すと

3214, john
4321, jack

正規表現が一致せず、1 つのアラートでブロック全体を取得します。

理由はわかりますか?

4

2 に答える 2

4

正規表現の意味を解析しましょう:

/^[^,]*,[^,]*,.*$/mg

/^      Match from the start of the line

[^,]*   Anything but a comma, 0 or more occurrences

,       One comma

[^,]*   Anything but a comma, 0 or more occurrences

,       One comma

.*      Any character or symbol, 0 or more occurrences

$       Match the end of the line

/m      Multiline

g       Global

フラグが本当に必要かどうかはわかりませんがmg、それ以外の問題は、正規表現で2 つのコンマが必要なことです。基本的に、次のように要約できます。

/^[^,]*,.*$/mg

これは、少なくとも 1 つのコンマを含む行に一致します。

于 2013-08-19T07:42:46.890 に答える
1

正規表現は 2 つのコンマに一致するため、2 番目の列の後にコンマを置くと機能します。

2番目のコンマオピオナルを入力すると、正規表現を修正できます

/^[^,]*,[^,]*,?.*$/mg

また、テキスト全体を選択したくない場合はm、複数行で一致するため、正規表現のオプションを使用しないでください。この場合、2 番目の列が\n真ん中にある 3 つの列に一致します。

于 2013-08-19T07:41:36.550 に答える