MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Cuantificatorii în expresiile regulate

În afară de clasele speciale de caractere discutate în articolele anterioare despre expresii regulate, există și o altă categorie de combinații cunoscute sub numele de cuantificatori:

  • *: se potrivește cu orice număr de repetări sau absența secvenței de caractere.
  • ?: se potrivește cu o apariție a secvenței de caractere sau absența ei în șir. De exemplu, /h?ome/ se potrivește cu subșirurile "home" și "ome".
  • +: se potrivește cu una sau mai multe repetări ale secvenței de caractere.
  • {n}: se potrivește cu exact n repetări ale caracterului anterior. De exemplu, h{3} se potrivește cu subșirul "hhh".
  • {n,}: se potrivește cu n sau mai multe repetări ale caracterului anterior. De exemplu, h{3,} se potrivește cu subșirurile "hhh", "hhhh", "hhhhh", etc.
  • {n,m}: se potrivește cu între n și m repetări ale caracterului anterior. De exemplu, h{2,4} se potrivește cu subșirurile "hh", "hhh", "hhhh".

Caracterele opționale:

Un număr de telefon poate să aibă sau să nu aibă cratime pentru separarea blocurilor individuale de cifre, de exemplu, "+1-234-567-8901", sau să nu aibă delimitatori, de exemplu, "12345678901". Cu alte cuvinte, cratimele delimitatoare sunt opționale.

const exp = /\d-?\d\d\d-?\d\d\d-?\d\d\d\d/;

const phone1 = "+1-234-567-8901";
const phone2 = "12345678901";
const phone3 = "1-2345678901";
console.log(exp.test(phone1));   // true
console.log(exp.test(phone2));   // true
console.log(exp.test(phone3));   // true

Aici, "-?" indică faptul că simbolul "-" poate fi opțional, însă dacă este prezent, atunci doar o singură dată.

Număr arbitrar de caractere

Simbolul "*" indică faptul că simbolul anterior poate apărea de un număr arbitrar de ori (inclusiv de 0 ori). De exemplu:

const exp = /;*/;    // se potrivește cu orice număr de caractere ;

const str1 = "number1 = 3";
const str2 = "number2 = 4;";
const str3 = "number3 = 5;;;";
console.log(exp.test(str1));   // true
console.log(exp.test(str2));   // true
console.log(exp.test(str3));   // true

Expresia regulată /;*/ indică faptul că punctul și virgulă (;) poate apărea de la 1 dată în sus sau deloc.

Simbolul apare cel puțin o dată

Cuantificatorul + indică faptul că simbolul precedent poate apărea o dată sau de mai multe ori. De exemplu:

const exp = /;+/;    // se potrivește cu 1 sau mai multe semne ;

const str1 = "number1 = 3";
const str2 = "number2 = 4;";
const str3 = "number3 = 5;;;";
console.log(exp.test(str1));   // false
console.log(exp.test(str2));   // true
console.log(exp.test(str3));   // true

Expresia regulată /;+/ indică faptul că punctul și virgulă (;) poate apărea cel puțin o dată (sau de mai multe ori).

Număr exact de apariții

Cuantificatorul {n} permite definirea unui număr exact de repetări ale simbolului precedent, prin valoarea n. De exemplu, pentru a defini un număr de telefon, se poate utiliza expresia /\d\d\d\d\d\d\d\d\d\d\d/ - 11 cifre consecutive.

Cu toate acestea, aceasta nu este optimă. Pentru a o scurta, putem utiliza o altă expresie: /\d{11}/ - simbolul "\d" (cifra) apare de 11 ori consecutiv. De exemplu:

const exp = /\d{11}/;

const phone1 = "+12345678901";
const phone2 = "1-2345678901";
const phone3 = "12345678901";
console.log(exp.test(phone1));   // true
console.log(exp.test(phone2));   // false
console.log(exp.test(phone3));   // true

Dar dacă blocurile de cifre sunt separate de un separator sub formă de cratimă, cum ar fi "+1-234-567-8901"? În acest caz, am putea specifica lungimea pentru fiecare bloc: /\d-\d{3}-\d{3}-\d{4}/. De exemplu:

const exp = /\d-\d{3}-\d{3}-\d{4}/;

const phone1 = "+12345678901";
const phone2 = "1-234-567-8901";
const phone3 = "12345678901";
console.log(exp.test(phone1));   // false
console.log(exp.test(phone2));   // true
console.log(exp.test(phone3));   // false

Combinându-le cu alți cuantificatori, putem face separatoarele sub formă de cratimă opționale:

const exp = /\d-?\d{3}-?\d{3}-?\d{4}/;

const phone1 = "+12345678901";
const phone2 = "1-234-567-8901";
const phone3 = "1-2345678901";
console.log(exp.test(phone1));   // true
console.log(exp.test(phone2));   // true
console.log(exp.test(phone3));   // true

Metasimbolul "\w" se potrivește oricărui caracter alfanumeric sau caracterului de subliniere. Prin urmare, expresia regulată /\w{8,}/ se potrivește șirurilor în care există o subșir de cel puțin 8 astfel de caractere.

Definirea unui număr minim și maxim de apariții

Cuantificatorul {n,m} permite definirea simultană a numărului minim (n) și maxim (m) de repetări. De exemplu, dorim ca numele noastre să nu fie prea scurte, să zicem, cel puțin 3 caractere, și nici prea lungi (de exemplu, nu mai mult de 10 caractere):

const exp = /^[a-zA-Z]{3,10}$/;

const code1 = "Tom";
const code2 = "Li";
const code3 = "Maximilianus";
console.log(exp.test(code1));   // true
console.log(exp.test(code2));   // false
console.log(exp.test(code3));   // false

Expresia regulată /^[a-zA-Z]{3,10}$/ indică faptul că orice caracter din intervalele "a-z" și "A-Z" trebuie să se repete de cel puțin 3 ori și nu mai mult de 10 ori. De asemenea, se specifică că aceasta trebuie să fie o întreagă cuvânt. Pentru aceasta, la început este indicat simbolul "^", iar la sfârșit simbolul "$".

← Lecția anterioară Lecția următoare →