4

私はこの正規表現を持っています: ([a-z]+)(?:\.).

Javascript で this: のように使用すると、最終的に次のような
"test.thing.other".split(/([a-z]+)(?:\.)/);配列が得られます:
["", "test", "", "thing", "other"]
最初と 3 番目の要素がその配列に入れられている理由がわかりません。誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

3

あなたの質問とコメント「Capture az until a period」に基づいて、次のように String.match を使用する必要があると思います。

arr = "test.thing.other".match(/[a-z]+(?=\.)/g);

与えます:

["test", "thing"]
于 2013-03-11T16:11:25.377 に答える
2

括弧が理由です。MDNstring.splitの発言は次のとおりです。

がキャプチャ用括弧を含む正規表現である場合separator、セパレータが一致するたびに、キャプチャ用括弧の結果 (未定義の結果を含む) が出力配列に結合されます。

彼らはまた、次のように警告しています。

ただし、すべてのブラウザーがこの機能をサポートしているわけではありません。

したがって、この結果は矛盾している可能性があります。式の内容で分割するだけの場合は、括弧を削除します。

>> 'test.thing.other'.split(/[a-z]+\./)
["", "", "other"]

これもあなたが望むものではないかもしれませんが、あなたの表現から直感的に期待される結果です。

ドットで分割したい場合は、正規表現で正確にドットを指定する必要があります。

>> 'test.thing.other'.split(/\./)
["test", "thing", "other"]
于 2013-03-11T16:00:14.730 に答える