Scheda di riferimento regex
Le espressioni regolari sono abbastanza compatte che è più facile consultarne la sintassi che memorizzarla. Questa pagina la contiene tutta in una schermata — classi, quantificatori, ancoraggi, gruppi, lookaround, escape e i flag — con un esempio funzionante per ogni riga.
Il flavour è JavaScript, che è ciò che gira nel tuo browser e ciò che usa il tester regex di questo sito. Gran parte è identica in Python, Java, Go e PCRE; dove i flavour divergono, divergono ai margini — il supporto per il lookbehind, la sintassi dei gruppi denominati e se \d significhi "cifra ASCII" oppure "qualsiasi cifra Unicode".
Due cose spiegano la maggior parte delle sorprese. I quantificatori sono greedy: prendono tutto ciò che possono e restituiscono solo quando il resto del pattern fallisce, ed è per questo che <.+> ingoia due tag e <.+?> no. E l'alternanza ha la precedenza più debole di tutte, quindi ^a|b$ significa "inizia con a, oppure finisce con b" — non ciò che la maggior parte delle persone intende quando lo scrive.
Classi di caratteri
11Le abbreviazioni sono solo ASCII a meno che non aggiungi il flag u e usi gli escape di proprietà Unicode.
| Sintassi | Significato | Esempio |
|---|---|---|
| . | Qualsiasi carattere tranne un'interruzione di rigaAggiungi il flag s per fargli corrispondere anche i newline. | /a.c/"abc" → "abc" |
| \d | Una cifra, 0–9 | /\d+/"order 42" → "42" |
| \D | Qualsiasi cosa che non sia una cifra | /\D+/"42abc" → "abc" |
| \w | Lettera, cifra o trattino bassoSolo ASCII — "é" non è \w. | /\w+/"user_1!" → "user_1" |
| \W | Qualsiasi cosa a cui \w non corrisponde | /\W+/"a++b" → "++" |
| \s | Qualsiasi spazio bianco, comprese tabulazioni e newline | /\s+/"a \t b" → " \t " |
| \S | Qualsiasi carattere non di spaziatura | /\S+/" hi" → "hi" |
| [abc] | Uno qualsiasi dei caratteri elencati | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Qualsiasi carattere tranne quelli elencati | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Un intervallo di caratteri | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Qualsiasi lettera Unicode (richiede il flag u) | /\p{L}+/"42 café" → "café" |
Quantificatori
7Tutti questi sono greedy per impostazione predefinita: prendono quanto più possono e restituiscono solo se il resto del pattern fallisce.
| Sintassi | Significato | Esempio |
|---|---|---|
| * | Zero o più | /ab*/"a" → "a" |
| + | Uno o più | /ab+/"abbb" → "abbb" |
| ? | Zero o uno — lo rende facoltativo | /colou?r/"color" → "color" |
| {3} | Esattamente tre | /\d{3}/"id 12345" → "123" |
| {2,} | Due o più | /a{2,}/"aaa" → "aaa" |
| {2,4} | Tra due e quattro | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Lazy — prende quanto meno possibileIl greedy <.+> ingoierebbe entrambi i tag. | /<.+?>/"<a><b>" → "<a>" |
Ancoraggi e confini
4Questi corrispondono a una posizione, non a un carattere, quindi non consumano nulla.
| Sintassi | Significato | Esempio |
|---|---|---|
| ^ | Inizio della stringa, o di una riga con il flag m | /^a/"abc" → "a" |
| $ | Fine della stringa, o di una riga con il flag m | /c$/"abc" → "c" |
| \b | Un confine di parolaÈ questo che impedisce a "cat" di corrispondere dentro "concatenate". | /\bcat\b/"the cat sat" → "cat" |
| \B | Non un confine di parola | /\Bcat/"concatenate" → "cat" |
Gruppi e alternanza
5| Sintassi | Significato | Esempio |
|---|---|---|
| (abc) | Gruppo catturante — memorizzato per la sostituzione | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Raggruppamento senza catturaUsalo quando serve solo il raggruppamento; mantiene significativi i numeri delle catture. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Gruppo catturante denominato | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | L'uno o l'altro lato — alternanzaL'alternanza ha la precedenza più bassa: ^a|b$ è "^a" oppure "b$", non "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Backreference al primo gruppo | /(\w)\1/"letter" → "tt" |
Lookaround
4Asserzioni su ciò che circonda una posizione. Non corrispondono a nulla di per sé, ed è ciò che le rende sicure da combinare.
| Sintassi | Significato | Esempio |
|---|---|---|
| (?=…) | Lookahead — seguito da questo | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Lookahead negativo — non seguito da questo | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — preceduto da questo | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Lookbehind negativo — non preceduto da questo | /(?<!\$)\b\d+/"about 40" → "40" |
Escape
5Questi dodici caratteri sono quelli che richiedono una barra rovesciata per essere presi alla lettera.
| Sintassi | Significato | Esempio |
|---|---|---|
| \. | Un punto letterale | /\d\.\d/"v2.5" → "2.5" |
| \\ | Una barra rovesciata letterale | /\\/"C:\\dir" → "\\" |
| \n | Un avanzamento riga | /a\nb/"a\nb" → "a\nb" |
| \t | Una tabulazione | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Un carattere tramite il suo punto di codice | /\u00e9/"café" → "é" |
Flag
6| Flag | Nome | Significato |
|---|---|---|
| g | Global | Trova ogni corrispondenza, non solo la prima. |
| i | Ignora maiuscole/minuscole | Corrisponde indipendentemente da maiuscole o minuscole. |
| m | Multiline | Fa corrispondere ^ e $ a ogni interruzione di riga invece che solo alle estremità della stringa. |
| s | Dot all | Consente a . di corrispondere anche alle interruzioni di riga. |
| u | Unicode | Tratta il pattern come punti di codice e abilita gli escape di proprietà \p{…}. |
| y | Sticky | Corrisponde solo esattamente a lastIndex, senza mai cercare in avanti. |