1

文字列を正規表現で分割しようとしていますが、予期しない結果が得られました:

var str = 'name == abcd';
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.)+/i;

pattern.exec(str);

例の結果は次のとおりです。[ "name == abcd", "name", "==", **"d"** ]

なぜ"d"ではないの"abcd"ですか?

4

3 に答える 3

6

キャプチャ グループ(.)は 1 文字のみをキャプチャします。この構文(.)+は、「それぞれが 1 文字を含む 1 つまたは複数のキャプチャ グループ」を意味します。検出されたキャプチャ グループの最後の反復であるため、"d" のみが返されます。

繰り返しをキャプチャ グループ内に移動する(.+)と、「1 つ以上の文字を含むキャプチャ グループ」が要求されます。これはおそらくあなたが望むものです。

var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
于 2013-01-15T23:18:23.757 に答える
3

最後+を括弧に移動します。

var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
于 2013-01-15T23:15:09.117 に答える
2

括弧の最後のペアは最後の一致のみをキャプチャするためです。+ を括弧に移動します。 /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;

于 2013-01-15T23:16:35.463 に答える