Expresii regulate
Piese, cuantificatori, grupuri, flag-uri și când să nu folosești regex.
Actualizat
Ce este o expresie regulată
O expresie regulată (regex) e un tipar care descrie cum arată un text: „începe cu o literă mare”, „conține un număr de telefon”, „e un cod poștal de 6 cifre”. Cu ea poți verifica, căuta, extrage și înlocui bucăți de text.
/^\d{6}$/.test('400001') // true — exact 6 cifre
'Tel: 0722 123 456'.match(/\d+/g) // ['0722', '123', '456']
'a-b-c'.replace(/-/g, ' ') // 'a b c'Arată criptic la început, dar sunt doar câteva piese combinate.
Piesele de bază
| Piesă | Potrivește | Exemplu |
|---|---|---|
abc |
exact textul | /cat/ |
. |
orice caracter (în afară de linie nouă) | /c.t/ → cat, cut |
\d / \w / \s |
cifră / literă-cifră-underscore / spațiu | /\d\d/ |
[abc] / [a-z] / [^0-9] |
unul din set / interval / orice în afară de | /[aeiou]/ |
^ / $ |
începutul / sfârșitul textului | /^Salut/ |
\b |
granița unui cuvânt | /\bvar\b/ |
\. \? \( |
caracterele speciale, ca text | /\.js$/ |
Cuantificatori — de câte ori
| Cuantificator | Înseamnă |
|---|---|
? |
0 sau 1 (opțional) |
* |
0 sau mai multe |
+ |
1 sau mai multe |
{3} / {2,4} / {2,} |
exact 3 / între 2 și 4 / minim 2 |
Implicit sunt lacomi (iau cât pot de mult); cu ? după ei devin leneși: /<.+?>/ oprește la primul >.
Grupuri
const m = '2026-10-08'.match(/(\d{4})-(\d{2})-(\d{2})/)
m[1] // '2026'
const { groups } = '2026-10-08'.match(/(?<year>\d{4})-(?<month>\d{2})/)
groups.year // '2026' — grupuri cu nume, mai lizibile
/(?:ab)+/ // grup fără captură — doar pentru a aplica + pe „ab”
/cat|dog/ // alternativăFlag-uri
| Flag | Efect |
|---|---|
g |
toate potrivirile, nu doar prima |
i |
fără diferență de majuscule |
m |
^ și $ pe fiecare linie |
u |
Unicode corect (diacritice, emoji) — folosește-l implicit |
Metodele — ce folosești când
| Vrei | Metodă |
|---|---|
| da / nu | regex.test(str) |
| prima potrivire + grupuri | str.match(regex) (fără g) |
| toate potrivirile cu grupuri | [...str.matchAll(/.../g)] |
| înlocuire | str.replace(regex, 'x') / replaceAll / cu funcție: replace(re, m => ...) |
| împărțire | str.split(/\s*,\s*/) |
Când nu folosești regex
- Email complet corect — imposibil practic; folosește
type="email"/z.email(). - HTML / JSON — folosește un parser (
DOMParser,JSON.parse). - URL-uri —
new URL(). - Regex-uri imense pe care nimeni nu le mai poate citi — mai bine câteva verificări simple.
Pe scurt
- Regex = tipar de text: piese (
\d,[a-z],^ $) + cuantificatori (+ * ? {n}) + grupuri. testpentru da/nu,matchAllpentru extragere,replacepentru înlocuire; flag-urig i u.- Pentru email, HTML, URL folosește unelte dedicate.