Trovate le stringhe tra doppi apici
Create una regexp per trovare le stringhe tra doppi apici "..."
.
Le stringhe dovrebbero supportare l’escape allo stesso modo delle stringhe JavaScript. Per esempio, i doppi apici possono essere inseriti come \"
una nuova linea come \n
, e lo stesso slash come \\
.
let str = "Just like \"here\".";
Si noti che, in particolare, un doppio apice con escape \"
non termina una stringa.
Noi dovremmo cercare, pertanto, da un doppio apice fino all’altro ignorando quelli con escape tra i due.
Questo è la parte fondamentale dell’esercitazione, altrimenti diventerebbe banale.
Ecco degli esempi di stringhe che corrispondono:
.. "test me" ..
.. "Say \"Hello\"!" ... (contiene doppi apici con escape)
.. "\\" .. (contiene un doppio slash)
.. "\\ \"" .. (contiene un doppio slash e un doppio apice con escape)
In JavaScript abbiamo bisogno di raddoppiare lo slash per passarli correttamente all’interno della stringa, in questo modo:
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';
// la stringa in memoria
alert(str); // .. "test me" .. "Say \"Hello\"!" .. "\\ \"" ..
La soluzione: /"(\\.|[^"\\])*"/g
.
Passo dopo passo:
- Innanzitutto cerchiamo un doppio apice di apertura
"
- Quindi se abbiamo un backslash
\\
(dobbiamo raddoppiarlo nel pattern perché è un carattere speciale), qualsiasi carattere dopo di esso è consentito (il punto). - Altrimenti consideriamo ogni carattere eccetto un doppio apice (che significherebbe la fine della stringa) ed un backslash (per evitare backslashe isolati, il backslash è usato soltanto in congiunzione con altri simboli dopo di esso):
[^"\\]
- …e così via fino al doppio apice di chiusura.
In azione:
let regexp = /"(\\.|[^"\\])*"/g;
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';
alert( str.match(regexp) ); // "test me","Say \"Hello\"!","\\ \""