2012-05-01 28 views
52

Por alguna razón estas dos expresiones regulares actúan de la misma manera:Escapar punto en un rango de expresiones regulares

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

Demo

En la primera expresión regular que no escapo el punto (.), mientras que en el segundo Regex lo hago (\.).

¿Cuáles son las diferencias y por qué actúan de la misma manera?

Respuesta

45

Porque el punto está dentro de la clase de caracteres (corchetes []).

Tome un vistazo a http://www.regular-expressions.info/reference.html, que dice (en la sección de clase char):

Cualquier carácter excepto^-] \ añadir que el carácter de las posibles coincidencias para la clase de caracteres.

+4

y el signo menos ('-') debe escaparse solo si está en el medio del rango? – gdoron

+0

Porque me está funcionando bien (en realidad, no importa dónde ponga que funcione bien.?!) – gdoron

+0

Si desea hacer coincidir el guión, agréguelo inmediatamente después de abrir el corchete, p. [-ARIZONA]. De lo contrario, el guión especifica el rango. Funciona en su caso, probablemente solo porque no especifica el rango en expresiones regulares, pero le sugiero que siga la referencia, en caso de que agregue rango más adelante. – usoban

78

El operador de punto . no necesita ser escapado dentro de una clase de caracteres [].

+17

Gracias por su respuesta clara. La otra respuesta fue muy confusa. – PolishHurricane

4

En this web page, veo que:

"Recuerde que el punto no es un meta dentro de una clase de caracteres, por lo que no es necesario para escapar con una barra invertida."

así que supongo que el escape de que no es necesario ...

17

Si el uso de JavaScript para probar su expresión regular, tratar \\. en lugar de \..

Actúa de la misma manera porque JS elimina la primera barra invertida.

+5

¿Has leído las respuestas ya? – gdoron

Cuestiones relacionadas