web-dev-qa-db-fra.com

Point d'échappement dans une plage de regex

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

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

démo

Dans la première expression régulière, je n'échappe pas au point (.) alors que je suis dans la deuxième expression rationnelle (\.).

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

63
gdoron

Parce que le point est à l'intérieur de la classe de caractères (crochets []).

Jetez un oeil à http://www.regular-expressions.info/reference.html , il est indiqué (sous la section char class):

Tous les caractères sauf ^ -]\ajoutent ce caractère aux correspondances possibles pour la classe de caractères.

54
usoban

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

91
jbabey

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

Il agit de la même manière car JS supprime la première barre oblique inverse.

24
MMiroslav

Sur cette page Web , je vois que:

"Rappelez-vous que le point n'est pas un métacaractère dans une classe de caractères, nous n'avons donc pas besoin de lui échapper avec une barre oblique inversée."

Donc, je suppose que s'en échapper est inutile ...

4
Rob I