Vai al contenuto
eLearner.app
Modulo 4 · Lezione 4 di 416/32 nel corso~12 min
Lezioni del modulo (4/4)

Gruppi nominati e backreference

Quando il numero dei gruppi cresce, ricordarsi che $2 e' "il mese" e $5 e' "l'anno" diventa fragile. La sintassi (?<nome>...) ti permette di nominare un gruppo: lo accedi per nome via groups.nome (e nelle sostituzioni come $<nome>).

Code
Pattern: (?<anno>\d{4})-(?<mese>\d{2})-(?<giorno>\d{2})
Sample:  2024-03-15
Gruppi:
  anno    = "2024"
  mese    = "03"
  giorno  = "15"

L'editor mostra accanto al match anche i gruppi nominati.

Backreference

Un backreference ti permette di riferirti, dentro lo stesso pattern, a una cattura precedente. La sintassi:

  • \1, \2, \u2026 -- riferimento numerato (al gruppo 1, 2, \u2026).
  • \k<nome> -- riferimento nominato.
Code
Pattern: \b(\w+)\s+\1\b
Sample:  un test un test il il gatto
                                ^^^^^

Matcha parole duplicate consecutive: (\w+) cattura una parola, poi \s+\1 richiede uno spazio e la stessa parola.

Auto-documentazione e backreference nominati

I named groups migliorano la leggibilità del codice JavaScript: anziché riferirsi a match[1], si accede a match.groups.nome. Nel pattern, il riferimento all'indietro avviene tramite la sintassi \\k<nome>.

Prova tu

Esercizio#regex.m4.l4.e1
Tentativi: 0Caricamento…

Trova ogni data in formato YYYY-MM-DD nominando i gruppi `anno`, `mese`, `giorno`.

Caricamento editor…
Mostra suggerimento

Sintassi: (?<nome>pattern). Il match ti mostra i gruppi sotto la voce 'named'.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m4.l4.e2
Tentativi: 0Caricamento…

Trova parole consecutive duplicate (es. `il il`, `casa casa`). Usa un gruppo per la prima e un backreference `\\1` per la seconda.

Caricamento editor…
Mostra suggerimento

\\b(\\w+)\\s+\\1\\b: la prima parola e' (\\w+), poi spazio, poi la STESSA parola \\1.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m4.l4.e3
Tentativi: 0Caricamento…

Trova coppie di tag HTML/XML (es. `<b>testo</b>` o `<i>testo</i>`) assicurandoti che il tag di chiusura coincida con quello di apertura utilizzando una named backreference.

Caricamento editor…
Mostra suggerimento

Assegna il nome (?<tag>\w+) e chiudilo con \k<tag>.

Soluzione disponibile dopo 3 tentativi