Lezioni del modulo (4/4)
Escape dei meta-caratteri
Alcuni caratteri in regex hanno un significato speciale: si chiamano
meta-caratteri. Se vuoi matchare il carattere letterale (es. un . vero,
un + vero, una parentesi vera) devi farli precedere da un backslash
\, che li escapa.
I meta-caratteri da ricordare sono dodici:
. * + ? ^ $ | \ ( ) [ ] { } /(Il / non e' un meta-carattere del motore in se', ma va escapato nella
notazione letterale /.../ di JavaScript.)
Pattern: \$\d+\.\d\d
Sample: Prezzi: $9.99, $12.50, totale $22.49.
^^^^^ ^^^^^^ ^^^^^^Qui escapiamo il $ (ancora di fine stringa) e il . (jolly) per matchare
i caratteri letterali nel formato prezzo "dollaro + numero + punto + due
cifre".
Doppio backslash nelle stringhe JS
Quando scrivi un pattern dentro a una stringa JavaScript (come fai nei nostri
esercizi), il backslash dev'essere raddoppiato. La stringa JS '\\d'
contiene due caratteri (\ e d) ed e' esattamente il pattern regex \d.
const re1 = /\d+/; // notazione letterale: un solo backslash
const re2 = new RegExp('\\d+'); // stringa: doppio backslashL'editor del corso mostra il pattern gia' decodificato (vedi un singolo
\d); non devi raddoppiare nulla tu.
I 12 meta-caratteri speciali
I caratteri con un significato speciale nell'engine sono esattamente 12: \\\ ^ $ . | ? * + ( ) [ {. Se intendi matcharli come testo letterale, devi farli precedere da un backslash. In alcuni linguaggi o contesti (es. stringhe JS non grezze), potrebbe essere necessario raddoppiare il backslash (\\\\).
Prova tu
Trova ogni prezzo nel formato `$N.NN` (dollaro, una o piu' cifre, punto, due cifre). Ricorda di escapare `$` e `.`.
Mostra suggerimento
$ va escapato come \\$, il punto come \\. - altrimenti il punto matcha qualunque cosa.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Trova ogni punto interrogativo letterale `?` nel testo. `?` e' un meta-carattere: va escapato.
Mostra suggerimento
Senza escape, ? sarebbe un quantificatore (modulo 2). Mettigli un \\ davanti.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Trova tutte le estensioni `.tar.gz` nel testo, assicurandoti che i punti siano trattati come caratteri letterali.
Mostra suggerimento
Inserisci un backslash prima di ogni punto per escaparlo.
Soluzione disponibile dopo 3 tentativi