最近、仲間の開発者がRegExpリテラルをコンストラクタ呼び出しに変更した後、バグがありました。 正確なコードは、tag
は、例えばrt:[email protected]
ために、最初の(バギー)コールはnull
を返し、第1の返している間Javascriptのregexpリテラルとコンストラクタの相違点
var parts = /rt:([^@]+)@(\d+)/.exec(tag);
の元対
var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);
た["rt:[email protected]", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]
言うまでもなく、私は変更を元に戻しましたが、最初にこのような違いがあるのはなぜですか。
いい回答ですが、私は私のものを削除すると思います!特定のRegExpを再利用する必要がある場合はどうでしょうか?それはコンストラクタを使う良い時期ではありませんか?あるいは単に 'var resuasableRegex =/.. pattern ../;'と言うでしょうか? –
@ElRonnoco:正確には、正規表現リテラルを変数に代入することもできます。 –
情報ありがとうございます。次回は、エスケープ文字が必要ないことを確認するために、文字列をよりよく調べます。とにかく、リテラルははるかに簡単です。 –