90

何らかの理由で、これら 2 つの正規表現は同じように動作します。

"43\\gf..--.65".replace(/[^\d.-]/g, "");​  // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, "");​  // 43..--.65

デモ

最初の正規表現では dot( .) をエスケープしませんが、2 番目の正規表現では( ) をエスケープし\.ます。

違いは何ですか?なぜ同じように振る舞うのですか?

4

4 に答える 4

107

ドット演算子.は、文字クラス内でエスケープする必要はありません[]

于 2012-05-01T13:05:28.633 に答える
74

ドットは文字クラス (角括弧[]) 内にあるためです。

http://www.regular-expressions.info/reference.htmlを見てください、それは言います(charクラスセクションの下):

^-]\ 以外のすべての文字は、その文字を文字クラスの可能な一致に追加します。

于 2012-05-01T13:04:40.733 に答える
46

JavaScript を使用して正規表現をテストする場合は、\\.代わりに\..

JS は最初のバックスラッシュを削除するため、同じように動作します。

于 2013-10-07T09:27:10.800 に答える
5

このウェブページでは、次のことがわかります。

「ドットは文字クラス内のメタ文字ではないことに注意してください。したがって、バックスラッシュでエスケープする必要はありません。」

だから私はそれのエスケープは不要だと思います...

于 2012-05-01T13:05:33.817 に答える