Myślnik wewnątrz zestawów w wyrażeniach regularnych JavaScript
Myślnik - też jest znakiem specjalnym wewnątrz [ ]
(a na zewnątrz - nie). Jeśli potrzebujesz samego
myślnika jako znaku - umieść go tam,
gdzie nie zostanie zinterpretowany jako separator
grup.
Dlaczego to ważne: możesz utworzyć grupę
znaków, sam tego nie zauważając. Na przykład,
tak - '[:-@]' - myślisz, że
wybierasz dwukropek, myślnik i małpę, a w
rzeczywistości otrzymujesz grupę znaków pomiędzy
: i @. W skład tej grupy wchodzą
następujące znaki: ? < = > : ;
Skąd się wzięły? Z tabeli ASCII - dwukropek ma mniejszy numer niż małpa - i otrzymujemy grupę. Czyli wszystkie grupy powstają według tabeli ASCII (w razie potrzeby można z tego korzystać).
Jak z tym walczyć: umieść znak myślnika
tam, gdzie na pewno nie zostanie zinterpretowany jako
znak grupy, na przykład na początku lub na końcu
(czyli po [ lub przed ]).
Można również wyescapować myślnik - wtedy
będzie on oznaczał sam siebie niezależnie od
pozycji. Na przykład, zamiast [:-@] napisać
[:\-@] - i grupy już nie będzie, a
będą trzy znaki - dwukropek, myślnik i małpa
@.
Przykład
W następującym przykładzie wzorzec wyszukiwania jest taki:
cyfra 1, następnie litera od 'a'
do 'z', następnie cyfra 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
W rezultacie do zmiennej zostanie zapisane następująco:
'! 1-2 ! !'
Przykład
Teraz wyescapujmy myślnik. W rezultacie
wzorzec wyszukiwania jest taki: cyfra 1, następnie
litera 'a', lub myślnik, lub litera 'z',
następnie cyfra 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
W rezultacie do zmiennej zostanie zapisane następująco:
'! ! 1c2 !'
Przykład
Można po prostu przesunąć myślnik, nie escapując go:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
W rezultacie do zmiennej zostanie zapisane następująco:
'! ! 1c2 !'
Przykład
W następującym przykładzie wzorzec wyszukiwania jest taki:
pierwszy znak - to małe litery lub
myślnik '-', potem dwie litery 'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
W rezultacie do zmiennej zostanie zapisane następująco:
'! Axx ! @xx'
Przykład
W następującym przykładzie wzorzec wyszukiwania jest taki:
pierwszy znak - to małe, duże
litery lub myślnik '-', potem dwie litery
'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
W rezultacie do zmiennej zostanie zapisane następująco:
'! ! ! @xx'
Przykład
Można umieścić myślnik pomiędzy dwiema grupami - tam na pewno nie utworzy jeszcze jednej grupy:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
W rezultacie do zmiennej zostanie zapisane następująco:
'! ! ! @xx'
Zadania praktyczne
Dany jest ciąg:
let str = 'xaz xBz xcz x-z x@z';
Znajdź wszystkie ciągi według następującego wzorca:
litera 'x', duża lub mała
litera lub myślnik, litera 'z'.
Dany jest ciąg:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Znajdź wszystkie ciągi według następującego wzorca:
litera 'x', następnie lub dolar, lub
myślnik lub plus, potem litera 'z'.