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.