Подтвердить что ты не робот

Выйти из точки регулярного выражения

По какой-то причине эти два регулярных выражения действуют одинаково:

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

Демо

В первом регулярном выражении я не убираю точку (.), а во втором регулярном выражении (\.).

В чем различия и почему они действуют одинаково?

4b9b3361

Ответ 1

Поскольку точка находится внутри символьного класса (квадратные скобки []).

Посмотрите http://www.regular-expressions.info/reference.html, он говорит (в разделе класса char):

Любой символ, кроме ^ -] \, добавляет этот символ к возможным совпадениям для класса символов.

Ответ 2

Точечный оператор . не должен быть экранирован внутри класса символов [].

Ответ 3

Если вы используете JavaScript для проверки своего Regex, попробуйте \\. вместо \..

Он действует так же, потому что JS удаляет первую обратную косую черту.

Ответ 4

На этой веб-странице, я вижу, что:

"Помните, что точка не является метасимволом внутри символьного класса, поэтому нам не нужно скрывать ее с помощью обратного слэша".

Итак, я думаю, что избежать этого не нужно...