W3docs

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.

ClasseCorrispondeEquivalente
\duna cifra[0-9]
\wun carattere word: una lettera, cifra o underscore[A-Za-z0-9_]
\sun carattere di spazio: spazio, tabulazione \t, a capo \n, ecc.
javascript— editable

Una singola abbreviazione corrisponde a un carattere. Aggiungere un quantificatore per trovare corrispondenze con sequenze — \d+ significa "una o più cifre":

javascript— editable

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.

ClasseCorrisponde
\Dqualsiasi carattere che non è una cifra
\Wqualsiasi carattere che non è un carattere word
\Squalsiasi carattere che non è uno spazio
javascript— editable

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.

javascript— editable

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).

javascript— editable

Quando si vuole che il punto corrisponda anche alle interruzioni di riga, aggiungere il flag s (abbreviazione di "dotAll"):

javascript— editable

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.

javascript— editable

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.)

javascript— editable

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.

javascript— editable

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.

javascript— editable

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: [\]], [\\].
javascript— editable
Attenzione

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 \s trovano corrispondenza con cifre, caratteri word e spazi; \D \W \S trovano corrispondenza con i rispettivi opposti.
  • Il punto . corrisponde a qualsiasi carattere eccetto un'interruzione di riga — a meno che non si aggiunga il flag s (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.

Pratica

Pratica
Quali delle seguenti sono classi di caratteri valide in JavaScript?
Quali delle seguenti sono classi di caratteri valide in JavaScript?
Was this page helpful?