Classi di Caratteri nelle Regex JavaScript
Impara le classi di caratteri nelle regex JavaScript: le abbreviazioni \d \w \s, le negazioni \D \W \S, il punto, il flag s (dotAll) e le classi personalizzate [...].
Classi di Caratteri in JavaScript
Una classe di caratteri è una parte di una espressione regolare che corrisponde a un singolo carattere appartenente a un insieme specifico — ad esempio "qualsiasi cifra" o "qualsiasi carattere di spazio". Invece di elencare ogni possibile carattere, si descrive il tipo di carattere desiderato e il motore delle regex esegue la corrispondenza.
Questa pagina tratta le classi abbreviate predefinite (\d, \w, \s), le loro negazioni (\D, \W, \S), il punto speciale . e il flag s (dotAll), e come creare classi personalizzate con le parentesi quadre [...], inclusi gli intervalli e l'escape.
Ogni classe corrisponde esattamente a un carattere. Per trovare corrispondenze multiple, si combina una classe con un quantificatore come + o {2,4}.
Le classi abbreviate: \d \w \s
JavaScript fornisce tre classi abbreviate per i gruppi di caratteri più comuni.
| Classe | Corrisponde | Equivalente |
|---|---|---|
\d | una cifra | [0-9] |
\w | un carattere word: una lettera, cifra o underscore | [A-Za-z0-9_] |
\s | un carattere di spazio: spazio, tabulazione \t, a capo \n, ecc. | — |
Una singola abbreviazione corrisponde a un carattere. Aggiungere un quantificatore per trovare corrispondenze con sequenze — \d+ significa "una o più cifre":
Le classi negate: \D \W \S
Ogni abbreviazione ha un corrispettivo in maiuscolo che corrisponde all'insieme opposto — qualsiasi carattere che non appartiene alla classe originale.
| Classe | Corrisponde |
|---|---|
\D | qualsiasi carattere che non è una cifra |
\W | qualsiasi carattere che non è un carattere word |
\S | qualsiasi carattere che non è uno spazio |
Un trucco utile: \D (o [^\d]) permette di rimuovere tutto tranne le cifre, operazione comune nella pulizia dell'input dell'utente come i numeri di telefono.
Il punto . e il flag s (dotAll)
Il punto . è una classe di caratteri speciale che corrisponde a qualsiasi singolo carattere eccetto un'interruzione di riga (\n, \r e alcuni separatori di riga Unicode).
Quando si vuole che il punto corrisponda anche alle interruzioni di riga, aggiungere il flag s (abbreviazione di "dotAll"):
Vedere patterns e flag per l'elenco completo dei flag delle regex come g, i e s.
Classi di caratteri personalizzate: [...]
Quando le abbreviazioni non sono adatte, è possibile creare classi personalizzate elencando i caratteri tra parentesi quadre. [abc] corrisponde a un singolo a, b, o c.
Intervalli
Un trattino - tra due caratteri crea un intervallo: [a-z] corrisponde a qualsiasi lettera minuscola, [0-9] a qualsiasi cifra. È possibile combinare più intervalli e caratteri letterali in una sola classe. (Per un approfondimento, vedere insiemi e intervalli.)
Classi personalizzate negate [^...]
Un accento circonflesso ^ come primo carattere all'interno delle parentesi nega la classe: [^a-z] corrisponde a qualsiasi carattere che non è una lettera minuscola.
Combinare abbreviazioni e caratteri
Le classi abbreviate funzionano anche all'interno delle classi personalizzate. [\w.] corrisponde a un carattere word oppure a un punto letterale — utile per token come stringhe di versione o nomi di file.
L'escape all'interno delle classi di caratteri
All'interno di [...], la maggior parte dei metacaratteri delle regex perde il proprio significato speciale, quindi di solito non è necessario fare l'escape. Ad esempio [.] corrisponde a un punto letterale — non è necessario usare [\.].
Alcuni caratteri richiedono però attenzione:
- Trattino
-— indica un intervallo tra due caratteri. Per trovare corrispondenza con un trattino letterale, posizionarlo per primo, per ultimo o fare l'escape:[-+],[+-], oppure[+\-]. - Accento circonflesso
^— nega la classe solo quando è il primo carattere. Altrove ([a^]) è un^letterale. - Parentesi quadra chiusa
]e backslash\— fare sempre l'escape:[\]],[\\].
Un trattino mal posizionato può creare silenziosamente un intervallo non voluto. [a-z] è un intervallo, ma [z-a] genera un errore di sintassi, e [%-/] corrisponde a ogni carattere il cui code point è compreso tra % e /. In caso di dubbio, fare l'escape del trattino o spostarlo ai margini della classe.
Unicode e il flag u
Per impostazione predefinita \w, \d e \s riconoscono solo l'ASCII. Con il flag u si attiva la corrispondenza Unicode-aware e gli escape di proprietà come \p{Letter}, che trovano corrispondenza con caratteri di qualsiasi lingua. Vedere il flag unicode u e la classe \p per i dettagli.
Conclusione
Le classi di caratteri permettono di descrivere che tipo di carattere trovare in corrispondenza invece di elencare ogni opzione:
\d \w \strovano corrispondenza con cifre, caratteri word e spazi;\D \W \Strovano corrispondenza con i rispettivi opposti.- Il punto
.corrisponde a qualsiasi carattere eccetto un'interruzione di riga — a meno che non si aggiunga il flags(dotAll). - Le parentesi quadre
[...]creano insiemi personalizzati; aggiungere intervalli con-, negare con un^iniziale e ricordare che la maggior parte dei metacaratteri è letterale all'interno di una classe.
Combinare queste classi con i quantificatori per trovare corrispondenza con caratteri ripetuti e creare pattern potenti e leggibili.