RegExp (expresii regulate) în JavaScript

Expresii regulate Toate browserele, Node.js

Creează o expresie regulată: un model de text folosit pentru căutare, validare și înlocuire.

Sintaxă
/model/indicatori
new RegExp(model, indicatori)

Ce face RegExp (expresii regulate)

O expresie regulată descrie un model de text: /\d+/ înseamnă „una sau mai multe cifre”. Se scrie între bare oblice sau se creează cu new RegExp("model", "indicatori") când modelul este construit din variabile.

Indicatori frecvenți: g (toate potrivirile), i (fără diferența dintre majuscule și minuscule), m (^ și $ pe fiecare rând), u (Unicode complet, necesar pentru \p{L}), s (punctul potrivește și rândul nou), d (pozițiile grupurilor), v (varianta nouă a lui u).

toString() returnează expresia ca text, cu bare și indicatori. Metoda veche compile este învechită: creează o expresie nouă în loc să o refolosești.

Parametri

Parametru Descriere
model Textul modelului (fără barele oblice) sau altă expresie regulată.
indicatori Opțional. Litere precum "gi".

Ce returnează

Un obiect RegExp.

Exemple

Exemplul 1: Literal și constructor

const cifre = /\d+/g;
const cuvant = "lei";
const pret = new RegExp(`(\\d+) ${cuvant}`, "i");

console.log(cifre.source, cifre.flags);
console.log(pret.toString());
console.log("Cost: 45 LEI".match(pret)[1]);

Rezultat

\d+ g
/(\d+) lei/i
45

Exemplul 2: Litere cu diacritice cu \p{L}

\w recunoaște doar literele englezești. Cu indicatorul u, \p{L} recunoaște orice literă.

const text = "Ștefan și Țuțu";

console.log(text.match(/\w+/g));
console.log(text.match(/\p{L}+/gu));

Rezultat

[ 'tefan', 'i', 'u', 'u' ]
[ 'Ștefan', 'și', 'Țuțu' ]

Exemplul 3: Validarea unui cod poștal românesc

const codPostal = /^\d{6}$/;

for (const valoare of ["700259", "70025", "7002591", "70o259"]) {
  console.log(valoare, codPostal.test(valoare));
}

Rezultat

700259 true
70025 false
7002591 false
70o259 false

Greșeli frecvente

  • În new RegExp("\d+") backslash-ul se pierde, pentru că textul îl consumă primul. Scrie new RegExp("\\d+") sau folosește String.raw.
  • Construiești modelul din textul introdus de utilizator fără să escapezi caracterele speciale. Folosește RegExp.escape(text).
  • Validezi cu un model fără ^ și $: /\d{6}/.test("abc1234567") dă true.

Comenzi înrudite

  • RegExp.prototype.test: Verifică dacă un text se potrivește cu o expresie regulată și returnează true sau false.
  • RegExp.prototype.exec: Caută următoarea potrivire a unei expresii regulate și o returnează cu grupuri și poziție.
  • RegExp.escape: Escapează caracterele speciale dintr-un text, ca să poată fi căutat exact într-o expresie regulată.