Escape dot in a regex range

2019-01-21 18:29发布

问题:

For some reason those two regex act the same way:

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

Demo

In the first regex I don't escape the dot(.) while in the second regex I do(\.).

What are the differences and why they act the same?

回答1:

Because the dot is inside character class (square brackets []).

Take a look at http://www.regular-expressions.info/reference.html, it says (under char class section):

Any character except ^-]\ add that character to the possible matches for the character class.



回答2:

The dot operator . does not need to be escaped inside of a character class [].



回答3:

If you using JavaScript to test your Regex, try \\. instead of \..

It acts on the same way because JS remove first backslash.



回答4:

On this web page, I see that:

"Remember that the dot is not a metacharacter inside a character class, so we do not need to escape it with a backslash."

So I guess the escaping of it is unnecessary...