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