Выйти из точки регулярного выражения
По какой-то причине эти два регулярных выражения действуют одинаково:
"43\\gf..--.65".replace(/[^\d.-]/g, ""); // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, ""); // 43..--.65
Демо
В первом регулярном выражении я не убираю точку (.
), а во втором регулярном выражении (\.
).
В чем различия и почему они действуют одинаково?
Ответы
Ответ 1
Поскольку точка находится внутри символьного класса (квадратные скобки []
).
Посмотрите http://www.regular-expressions.info/reference.html, он говорит (в разделе класса char):
Любой символ, кроме ^ -] \, добавляет этот символ к возможным совпадениям для класса символов.
Ответ 2
Точечный оператор .
не должен быть экранирован внутри класса символов []
.
Ответ 3
Если вы используете JavaScript для проверки своего Regex, попробуйте \\.
вместо \.
.
Он действует так же, потому что JS удаляет первую обратную косую черту.
Ответ 4
На этой веб-странице, я вижу, что:
"Помните, что точка не является метасимволом внутри символьного класса, поэтому нам не нужно скрывать ее с помощью обратного слэша".
Итак, я думаю, что избежать этого не нужно...