Regex — Cheat Sheet

Tag: regex, javascript, pattern-matching, validation, string

Livello: intermedio

TL;DR: Riferimento rapido per pattern, classi di caratteri e validazioni comuni. Ottimizzato per parsing frontend e controlli backend.

Concetti chiave

Le ancore definiscono i limiti: ^ indica l'inizio della stringa, $ indica la fine.

Quantificatori base: * (zero o più), + (uno o più), ? (zero o uno).

Quantificatori specifici: {n} (esattamente n), {n,} (almeno n), {n,m} (da n a m).

Classi predefinite: \d (cifra), \w (alfanumerico più underscore), \s (spazio bianco).

La versione maiuscola delle classi inverte il match: \D (non-cifra), \W (non-alfanumerico).

Gruppi di cattura standard: (...) memorizza il match per l'estrazione o le backreference.

Gruppi non catturanti: (?:...) raggruppa senza salvare il match in memoria, ottimizzando le performance.

Lookahead positivo (?=...) e negativo (?!...) per asserire la presenza di un pattern senza includerlo nel match.

Flag essenziali (JS): g (ricerca globale), i (case-insensitive), m (multiline).

Domande tipiche e risposte pronte

Q: Come previeni il "Catastrophic Backtracking" in regex complesse?R: Evito quantificatori ripetuti o annidati in modo ambiguo, come (a+)+. Preferisco classi di caratteri precise o gruppi non catturanti.

Q: In JavaScript, quando usi test() rispetto a match()?R: Uso test() sull'oggetto RegExp quando mi serve solo un booleano (es. validazione form). Uso match() sulla stringa per estrarre i dati.

Q: Come si modifica un quantificatore da "greedy" a "lazy"?R: Aggiungendo un punto interrogativo subito dopo il quantificatore, ad esempio usando .*? invece del classico .*.

Insidie e errori comuni

Dimenticare l'escape di caratteri speciali come ., +, ?, * usando la backslash, trasformandoli in operatori involontari.

Scrivere regex per la validazione delle email eccessivamente restrittive, bloccando i nuovi TLD (Top Level Domain) validi.

Non testare le espressioni regolari su stringhe multiriga o con caratteri Unicode imprevisti, causando falsi negativi.

Snippet e comandiJavaScript

// Validazione di massima per una email formale
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const isEmailValid = emailRegex.test("utente@dominio.it");

// Estrazione di tutti i valori numerici (interi e decimali)
const text = "Il totale e' 45.50 euro per 2 articoli";
const numbers = text.match(/\d+(\.\d+)?/g);
// Risultato: ["45.50", "2"]

// Regex password: min 8 caratteri, almeno una maiuscola e un numero
const pwdRegex = /^(?=.*[A-Z])(?=.*\d).{8,}$/;

Da ripassare

[ ] Limiti di supporto storici per il lookbehind (?<=...) su vecchie versioni di Safari.

[ ] Utilizzo dei named capture groups (?<nome>...) nelle API moderne.

Jarvis Interviews
Jarvis