Escape dot в диапазоне регулярных выражений


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

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

демо

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

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

4 56

4 ответа:

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

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

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

оператор "точка". не нужно экранировать внутри символьного класса [].

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

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

On этой странице, Я вижу, что:

"помните, что точка не является метасимволом внутри класса символов, поэтому нам не нужно избегать ее с обратной косой чертой."

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