2012-05-01 10 views
52

Per qualche motivo queste due espressioni regolari si comportano allo stesso modo:Fuga dot in una gamma regex

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

Demo

Nella prima espressione regolare non fuggire il punto (.) mentre nel secondo regex I do (\.).

Quali sono le differenze e perché si comportano allo stesso modo?

risposta

45

Poiché il punto si trova all'interno della classe di caratteri (parentesi quadre []).

Date un'occhiata a http://www.regular-expressions.info/reference.html, si dice (sotto la sezione di classe char):

Qualsiasi carattere ad eccezione^-] \ aggiungere che il carattere delle possibili corrispondenze per la classe di caratteri.

+4

e il segno meno ('-') deve essere sfuggito solo se si trova nel mezzo dell'intervallo? – gdoron

+0

Perché funziona correttamente per me (actully non importa dove ho messo funziona correttamente.?!) – gdoron

+0

Se desideri abbinare il trattino, aggiungilo immediatamente dopo aver aperto la parentesi quadra, ad es. [-A-Z]. Altrimenti, trattino specifica l'intervallo. Probabilmente funziona nel tuo caso probabilmente solo perché non stai specificando l'intervallo nella regex, ma ti suggerisco di seguire il riferimento, nel caso in cui aggiungerai l'intervallo in un secondo momento. – usoban

78

L'operatore punto . non deve essere sfuggito all'interno di una classe di caratteri [].

+17

Grazie per la risposta chiara. L'altra risposta era troppo confusa. – PolishHurricane

4

Su this web page, vedo che:

"ricordare che il punto non è un metacarattere all'interno di una classe di caratteri, in modo che non hanno bisogno di fuggire con un backslash."

Quindi credo che la fuga di esso è inutile ...

17

Se si utilizza JavaScript per testare la vostra Regex, provare \\. invece di \..

Agisce allo stesso modo perché JS rimuove la prima barra retroversa.

+5

Hai già letto le risposte? – gdoron