102 votes

Échapper le point dans une plage regex

Pour une raison quelconque, ces deux regex agissent de la même manière :

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

Demo

Dans la première regex, je n'échappe pas le point( . ) alors que dans la deuxième regex je fais( \. ).

Quelles sont les différences et pourquoi agissent-ils de la même manière ?

124voto

jbabey Points 20696

L'opérateur point . n'a pas besoin d'être échappé à l'intérieur d'une classe de caractères. [] .

79voto

usoban Points 4015

Parce que le point se trouve à l'intérieur d'une classe de caractères (crochets). [] ).

Jetez un coup d'œil à http://www.regular-expressions.info/reference.html il est dit (sous la section classe de char) :

Tout caractère sauf ^-]\ ajoute ce caractère. pour la classe de caractères.

51voto

MMiroslav Points 66

Si vous utilisez JavaScript pour tester votre Regex, essayez \\. au lieu de \. .

Il agit de la même manière car JS supprime le premier backslash.

5voto

Rob I Points 2750

Sur cette page web Je vois ça :

"Rappelez-vous que le point n'est pas un métacaractère à l'intérieur d'une classe de caractères, nous n'avons donc pas besoin de l'échapper avec une barre oblique inverse."

Donc je suppose que l'échapper est inutile...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X