2016-02-21 12 views
7

Próbuję zrozumieć znak kreskowy - musi uciec za pomocą odwrotnego ukośnika w wyrażeniu regularnym?Czy muszę uciec od znaku kreski w wyrażeniu regularnym?

Rozważ to:

var url  = '/user/1234-username'; 
var pattern = /\/(\d+)\-/; 
var match = pattern.exec(url); 
var id  = match[1]; // 1234 

Jak widać w powyższym regex, próbuję wydobyć numer ID z adresu URL. Również uniknąłem znaku - w moim regexie używając ukośnika odwrotnego \. Ale kiedy usunę ten backslash, nadal wszystko w porządku ...! Innymi słowy, obie z nich są w porządku:

Teraz chcę wiedzieć, który z nich jest poprawna (standard)? Czy muszę uciec od znaku kreski w regex?

+1

myślę, że trzeba tylko uciec kreskę, gdy jest to wewnątrz '[]' nie jestem pewien. –

+0

Nie odpowiedziałeś na własne pytanie? – jonrsharpe

+0

@jonrsharpe Co dokładnie masz na myśli? Jeśli znam odpowiedź, to dlaczego mam o to zapytać? – Shafizadeh

Odpowiedz

12

Należy tylko uciec od znaku kreski, jeśli w innym przypadku można go zinterpretować jako wskaźnik zakresu (co może mieć miejsce w przypadku character class).

/-/  # matches "-" 
/[a-z]/ # matches any letter in the range between ASCII a and ASCII z 
/[a\-z]/ # matches "a", "-" or "z" 
/[a-]/  # matches "a" or "-" 
/[-z]/  # matches "-" or "z" 
+0

Świetna odpowiedź .... +1 – Shafizadeh

2

- ma znaczenie tylko wewnątrz klasy postaci [], więc gdy jesteś poza nim nie trzeba uciekać -

+0

Ach, ok, tnx ... +1 – Shafizadeh

Powiązane problemy