String.prototype.matchAll în JavaScript

Returnează toate potrivirile unei expresii regulate, fiecare cu grupurile și poziția ei.

Sintaxă
sir.matchAll(expresieRegulataCuG)

Ce face String.prototype.matchAll

matchAll returnează un iterator. Fiecare element este o potrivire completă, ca la exec: textul găsit, grupurile, index și groups.

Expresia regulată trebuie să aibă indicatorul g, altfel primești TypeError. Parcurgi rezultatul cu for...of sau îl transformi în tablou cu Array.from sau [...].

Parametri

Parametru Descriere
expresieRegulataCuG O expresie regulată cu indicatorul g.

Ce returnează

Un iterator cu potrivirile (gol dacă nu există niciuna).

Exemple

Exemplul 1: Prețurile dintr-o listă

const lista = "Pâine: 6 lei, Lapte: 9 lei, Cafea: 32 lei";

for (const potrivire of lista.matchAll(/(\p{L}+): (\d+) lei/gu)) {
  console.log(potrivire[1], "->", Number(potrivire[2]), "la poziția", potrivire.index);
}

Rezultat

Pâine -> 6 la poziția 0
Lapte -> 9 la poziția 14
Cafea -> 32 la poziția 28

Exemplul 2: Parametrii dintr-o adresă, cu grupuri cu nume

const adresa = "pagina=3&sort=pret&ordine=asc";
const potriviri = [...adresa.matchAll(/(?<cheie>\w+)=(?<valoare>\w+)/g)];

console.log(Object.fromEntries(potriviri.map((p) => [p.groups.cheie, p.groups.valoare])));

Rezultat

{ pagina: '3', sort: 'pret', ordine: 'asc' }

Greșeli frecvente

  • Uiți indicatorul g: sir.matchAll(/\d+/) aruncă TypeError.
  • Parcurgi același iterator de două ori. A doua oară este gol; transformă-l în tablou dacă ai nevoie de el de mai multe ori.

Comenzi înrudite

  • String.prototype.match: Caută într-un text potriviri cu o expresie regulată și le returnează.
  • RegExp.prototype.exec: Caută următoarea potrivire a unei expresii regulate și o returnează cu grupuri și poziție.
  • Object.fromEntries: Construiește un obiect dintr-o listă de perechi [cheie, valoare]; inversul lui Object.entries.