Nawiasy klamrowe w wyrażeniach regularnych JavaScript
Operatory '+', '*', '?'
są dobre, jednak za ich pomocą nie można określić
konkretnej liczby powtórzeń. W tym przypadku
z pomocą przychodzi operator {}.
Działa on w następujący sposób: {5}
- pięć powtórzeń, {2,5} – powtarza się
od dwóch do pięciu (oba włącznie), {2,}
- powtarza się dwa lub więcej razy. Zwróć uwagę,
że takiego wariantu - {,2}
- nie ma. Spójrz na przykłady:
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'x', litera 'a' jeden
lub dwa razy, litera 'x':
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{1,2}x/g, '!');
W rezultacie do zmiennej zapisze się następująco:
'xx ! ! xaaax'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'x', litera 'a' dwa
razy lub więcej, litera 'x':
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{2,}x/g, '!');
W rezultacie do zmiennej zapisze się następująco:
'xx xax ! !'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'x', litera 'a' trzy
razy, litera 'x':
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{3}x/g, '!');
W rezultacie do zmiennej zapisze się następująco:
'xx xax xaax !'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'a' dziesięć razy:
let str = 'aaa aaaaaaaaaa aaa';
let res = str.replace(/a{10}/g, '!');
W rezultacie do zmiennej zapisze się następująco:
'aaa ! aaa'
Przykład
W tym przykładzie autor kodu chciał taki wzorzec:
litera 'x', litera 'a' trzy
razy i mniej, litera 'x',
ale niestety, takie - {,3} - nie działa.
Należy podać jawnie:
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{1,3}x/g, '!');
W rezultacie do zmiennej zapisze się następująco:
'xx ! ! !'
Przykład
Zero też jest dopuszczalne:
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{0,3}x/g, '!');
W rezultacie do zmiennej zapisze się następująco:
'! ! ! !'
Zadania praktyczne
Dany jest ciąg:
let str = 'aa aba abba abbba abbbba abbbbba';
Napisz wyrażenie regularne, które znajdzie ciągi
'abba', 'abbba', 'abbbba'
i tylko je.
Dany jest ciąg:
let str = 'aa aba abba abbba abbbba abbbbba';
Napisz wyrażenie regularne, które znajdzie ciągi
typu 'aba', w których 'b' występuje
mniej niż 3 razy (włącznie).
Dany jest ciąg:
let str = 'aa aba abba abbba abbbba abbbbba';
Napisz wyrażenie regularne, które znajdzie ciągi
typu 'aba', w których 'b' występuje
więcej niż 4 razy (włącznie).