Riferimenti posteriori nel modello delle espressioni regolari in JavaScript
Il contenuto dei gruppi di cattura è accessibile non solo nella stringa di sostituzione, ma anche all'interno del modello dell'espressione regolare: noi possiamo mettere qualcosa in un gruppo, e poi dire direttamente nell'espressione regolare che qui deve essere presente il contenuto di quel gruppo.
Il contenuto dei gruppi di cattura è accessibile tramite i loro numeri,
preceduti da una barra rovesciata. Per esempio,
il primo gruppo sarà accessibile in questo modo: \1,
il secondo gruppo in questo modo - \2, il terzo
- \3 e così via.
Sono sicuro che tutto quanto scritto sopra sia ancora piuttosto oscuro per voi. Non è sorprendente, dato che i gruppi di cattura sono l'argomento più difficile da capire delle espressioni regolari. Analizziamo con degli esempi.
Esempio
Supponiamo di avere una stringa come questa:
let str = 'aa bb cd ef';
Troviamo tutti i punti in cui ci sono due lettere qualsiasi uguali consecutive. Per risolvere il problema, cercheremo qualsiasi lettera, la metteremo in un gruppo di cattura, e poi controlleremo se il carattere successivo è il contenuto di quel gruppo:
let res = str.replace(/([a-z])\1/g, '!');
Di conseguenza, nella variabile verrà memorizzato quanto segue:
'! ! cd ef'
Esempio
Supponiamo di avere una stringa come questa:
let str = 'asxca buzxb csgd';
Troviamo tutte le parole in cui la prima e l'ultima lettera sono uguali. Per risolvere il problema, scriveremo il seguente modello: una lettera, poi una o più lettere, e poi la stessa lettera della prima:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
Di conseguenza, nella variabile verrà memorizzato quanto segue:
'! ! csgd'
Problemi pratici
Data la stringa:
let str = 'aaa bbb ccc xyz';
Trova tutte le sottostringhe in cui ci sono tre lettere uguali consecutive.
Data la stringa:
let str = 'a aa aaa aaaa aaaaa';
Trova tutte le sottostringhe in cui ci sono due o più lettere uguali consecutive.
Data la stringa:
let str = 'aaa aaa bbb bbb ccc ddd';
Trova tutte le sottostringhe in cui ci sono due parole uguali consecutive.