Escaping dei caratteri speciali nelle espressioni regolari JavaScript
Supponiamo di voler fare in modo che un carattere speciale rappresenti se stesso. Per fare ciò è necessario escaparlo utilizzando una barra rovesciata. Vediamo alcuni esempi.
Esempio
Nel seguente esempio, l'autore dell'espressione regolare voleva
che il modello di ricerca fosse: lettera
'a', poi il segno più '+', poi
lettera 'x'. Tuttavia, l'autore del codice
non ha escapato il carattere '+' e quindi
il modello di ricerca in realtà è:
lettera 'a' una o più volte, poi
lettera 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Di conseguenza, nella variabile verrà memorizzato quanto segue:
'a+x ! ! !'
Esempio
In questo caso l'autore ha escapato il segno più con una
barra rovesciata. Ora il modello di ricerca è come dovrebbe essere:
lettera 'a', poi il segno più
'+', poi lettera 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Di conseguenza, nella variabile verrà memorizzato quanto segue:
'! ax aax aaax'
Esempio
In questo esempio, il modello è il seguente: lettera
'a', poi il punto '.', poi
lettera 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Di conseguenza, nella variabile verrà memorizzato quanto segue:
'! abx azx'
Esempio
Nel seguente esempio l'autore si è dimenticato di escapare il punto e l'espressione regolare ha catturato tutte le sottostringhe, poiché un punto non escapato rappresenta qualsiasi carattere:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Di conseguenza, nella variabile verrà memorizzato quanto segue:
'! ! !'
Osservazione
Nota che se dimentichi la barra rovesciata per il punto (quando dovrebbe rappresentare se stesso) - potrebbe passare inosservato:
'a.x'.replace(/a.x/g, '!'); // restituirà '!', come volevamo
Visivamente funziona correttamente (poiché il punto
rappresenta qualsiasi carattere, incluso un punto normale
'.'). Ma se cambiamo la stringa
in cui avvengono le sostituzioni - vedremo il nostro
errore:
'a.x abx azx'.replace(/a.x/g, '!'); // restituirà '! ! !', ma ci si aspettava '! abx azx'
Elenco dei caratteri speciali e ordinari
Se si escapa un carattere ordinario - non succede niente di grave - rappresenterà comunque se stesso. Fanno eccezione le cifre, non possono essere escapate.
Spesso sorge il dubbio se un determinato carattere sia speciale. Alcuni arrivano al punto di escapare tutti i caratteri sospetti senza criterio. Tuttavia, questa è una cattiva pratica (ingombra l'espressione regolare di barre rovesciate).
Sono caratteri speciali: $ ^ . * + ? \
/ {} [] () |
Non sono caratteri speciali: @ : , ' " ;
- _ = < > % # ~ `& !
Problemi pratici
Data la stringa:
let str = 'a.a aba aea';
Scrivi un'espressione regolare che trovi la stringa
'a.a', senza catturare le altre.
Data la stringa:
let str = '2+3 223 2223';
Scrivi un'espressione regolare che trovi la stringa
'2+3', senza catturare le altre.
Data la stringa:
let str = '23 2+3 2++3 2+++3 345 567';
Scrivi un'espressione regolare che trovi le stringhe
'2+3', '2++3', '2+++3',
senza catturare le altre (+ può essere qualsiasi
numero).
Data la stringa:
let str = '23 2+3 2++3 2+++3 445 677';
Scrivi un'espressione regolare che trovi le stringhe
'23', '2+3', '2++3',
'2+++3', senza catturare le altre.
Data la stringa:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Scrivi un'espressione regolare che trovi le stringhe
'*q+', '*qq+', '*qqq+',
senza catturare le altre.
Data la stringa:
let str = '[abc] {abc} abc (abc) [abc]';
Scrivi un'espressione regolare che trovi le stringhe
tra parentesi quadre e le sostituisca con '!'.