Operatori de repetare a caracterelor în regex
Există situații când dorim să indicăm,
că un caracter se repetă de un anumit număr
de ori. Dacă știm numărul exact de repetări,
putem pur și simplu să-l scriem de mai multe ori
- /aaaa/. Dar ce facem dacă vrem
să spunem așa: repetă unu sau mai multe
ori?
Pentru asta există operatori (cuantificatori)
de repetare: plus + (unu sau mai multe ori),
stea * (zero sau mai multe ori) și
întrebare ? (zero sau o dată). Acești
operatori acționează asupra caracterului care
stă înaintea lor.
Să vedem funcționarea acestor operatori cu exemple.
Exemplu
Să găsim toate subșirurile după șablonul litera
'x', litera 'a' unu sau mai multe
ori, litera 'x':
let str = 'xx xax xaax xaaax xbx';
let res = str.replace(/xa+x/g, '!');
În rezultat, în variabilă se va scrie următorul:
'xx ! ! ! xbx'
Exemplu
Să găsim toate subșirurile după șablonul litera
'x', litera 'a' zero sau mai multe
ori, litera 'x':
let str = 'xx xax xaax xaaax xbx'
let res = str.replace(/xa*x/g, '!');
În rezultat, în variabilă se va scrie următorul:
'! ! ! ! xbx'
Exemplu
Să găsim toate subșirurile după șablonul litera
'x', litera 'a' zero sau o dată,
litera 'x':
let str = 'xx xax xaax xbx';
let res = str.replace(/xa?x/g, '!');
În rezultat, în variabilă se va scrie următorul:
'! ! xaax xbx'
Probleme practice
Este dat șirul:
let str = 'aa aba abba abbba abca abea';
Scrieți o expresie regulată care va găsi șirurile
'aba', 'abba', 'abbba'
după șablonul: litera 'a', litera 'b'
orice număr de ori, litera 'a'.
Este dat șirul:
let str = 'aa aba abba abbba abca abea';
Scrieți o expresie regulată care va găsi șirurile
'aa', 'aba', 'abba',
'abbba' după șablonul: litera 'a',
litera 'b' orice număr de ori (inclusiv
de zero ori), litera 'a'.
Este dat șirul:
let str = 'aa aba abba abbba abca abea';
Scrieți o expresie regulată care va găsi șirurile
'aa', 'aba' după șablonul: litera
'a', litera 'b' o dată sau
de zero ori, litera 'a'.
Este dat șirul:
let str = 'aa aba abba abbba abca abea';
Scrieți o expresie regulată care va găsi șirurile
'aa', 'aba', 'abba',
'abbba', fără a captura 'abca'
și 'abea'.