文字列を正規表現で分割しようとしていますが、予期しない結果が得られました:
var str = 'name == abcd';
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.)+/i;
pattern.exec(str);
例の結果は次のとおりです。[ "name == abcd", "name", "==", **"d"** ]
なぜ"d"
ではないの"abcd"
ですか?
文字列を正規表現で分割しようとしていますが、予期しない結果が得られました:
var str = 'name == abcd';
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.)+/i;
pattern.exec(str);
例の結果は次のとおりです。[ "name == abcd", "name", "==", **"d"** ]
なぜ"d"
ではないの"abcd"
ですか?
キャプチャ グループ(.)
は 1 文字のみをキャプチャします。この構文(.)+
は、「それぞれが 1 文字を含む 1 つまたは複数のキャプチャ グループ」を意味します。検出されたキャプチャ グループの最後の反復であるため、"d" のみが返されます。
繰り返しをキャプチャ グループ内に移動する(.+)
と、「1 つ以上の文字を含むキャプチャ グループ」が要求されます。これはおそらくあなたが望むものです。
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
最後+
を括弧に移動します。
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
括弧の最後のペアは最後の一致のみをキャプチャするためです。+ を括弧に移動します。
/([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;