何らかの理由で、これらの2つの正規表現は同じように動作します。
"43\\gf..--.65".replace(/[^\d.-]/g, ""); // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, ""); // 43..--.65
最初の正規表現ではdot(.
)をエスケープしませんが、2番目の正規表現ではdo(\.
)をエスケープします。
違いは何ですか、なぜ同じように振る舞いますか?
ドットは文字クラス内にあるため(角括弧[]
)。
http://www.regular-expressions.info/reference.html を見てください。(charクラスセクションの下):
^-] \以外の任意の文字は、その文字を文字クラスの可能な一致に追加します。
ドット演算子.
は、文字クラス[]
内でエスケープする必要はありません。
JavaScriptを使用して正規表現をテストする場合は、\\.
の代わりに\.
を試してください。
JSが最初のバックスラッシュを削除するため、同じように動作します。