19

この質問を書き始めてから、私は自分が持っているすべての質問に対する答えを理解したと思いますが、他の人に役立つかもしれないし、より明確にすることが役立つかもしれないので、とにかく投稿したいと思いました。

javascript関数splitを使用して、先読みで正規表現を使用しようとしていました。matchを呼び出したときに一致が見つかったのに、何らかの理由で文字列が分割されていませんでした。もともと、問題は正規表現で先読みを使用することによるものだと思っていました。簡単な例を次に示します。

動作しません:

"aaaaBaaaa".split("(?=B).");

作品:

"aaaaBaaaa".match("(?=B).");

問題は、分割された例では、渡された文字列が正規表現として解釈されていなかったことであると思われます。引用符の代わりにスラッシュを使用すると、問題が解決するようです。

"aaaaBaaaa".split(/(?=B)./);

私は次のばかげた見た目の例で私の理論を確認しました:

"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");

分割関数が正規表現を持っていないのに、match関数が正規表現を持っていると仮定するのは奇妙だと思う人はいますか?

4

2 に答える 2

31

String.split最初のパラメーターとして文字列または正規表現を受け入れます。メソッドはString.match正規表現のみを受け入れます。

String.match渡されたものは何でも試してみると思います。したがって、文字列を渡すと、正規表現として解釈されます。String.splitメソッドは正規表現と文字列を受け入れることができるため、これを行う余裕はありません。この場合、後から推測するのはばかげています。


編集:(「JavaScript:決定版ガイド」から)

String.match正規表現を使用する必要があります。渡される引数は、RegExp一致するパターンを指定するオブジェクトである必要があります。この引数が でない場合は、まずコンストラクターRegExpに渡すことによって 1 に変換されます。RegExp()

于 2009-05-01T16:58:56.887 に答える
3

正しく思い出せば(そしてここでは非常に間違っている可能性があります)、splitメソッドは正規表現エンジンが広く使用される前にjavascriptで実装されていたため、おそらく下位互換性のためです。

于 2009-05-01T16:43:56.830 に答える