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?
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.
The dot operator .
does not need to be escaped inside of a character class []
.
If you using JavaScript to test your Regex, try \\.
instead of \.
.
It acts on the same way because JS remove first backslash.
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...