Encuentra cadenas entre comillas
Crea una expresión regular para encontrar cadenas entre comillas dobles "..."
.
Las cadenas deben admitir el escape, de la misma manera que lo hacen las cadenas de JavaScript. Por ejemplo, las comillas se pueden insertar como \"
, una nueva línea como \n
, y la barra invertida misma como \\
.
let str = "Just like \"here\".";
Tenga en cuenta, en particular, que una comilla escapada \"
no termina una cadena.
Por lo tanto, deberíamos buscar de una comilla a otra (la de cierre), ignorando las comillas escapadas en el camino.
Esa es la parte esencial de la tarea, de lo contrario sería trivial.
Ejemplos de cadenas para hacer coincidir:
.. "test me" ..
.. "Say \"Hello\"!" ... (comillas escapadas dentro)
.. "\\" .. (doble barra invertida dentro)
.. "\\ \"" .. (doble barra y comilla escapada dentro.)
En JavaScript, necesitamos duplicar las barras para pasarlas directamente a la cadena, así:
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';
// the in-memory string
alert(str); // .. "test me" .. "Say \"Hello\"!" .. "\\ \"" ..
La solución: /"(\\.|[^"\\])*"/g
.
El paso a paso:
- Primero buscamos una comilla de apertura
"
- Luego, si tenemos una barra invertida
\\
(tenemos que duplicarla en el patrón porque es un carácter especial). Luego, cualquier carácter está bien después de él (un punto). - De lo contrario, tomamos cualquier carácter excepto una comilla (que significaría el final de la cadena) y una barra invertida (para evitar barras invertidas solitarias, la barra invertida solo se usa con algún otro símbolo después):
[^"\\]
- …Y así sucesivamente hasta la comilla de cierre.
En acción:
let regexp = /"(\\.|[^"\\])*"/g;
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';
alert( str.match(regexp) ); // "test me","Say \"Hello\"!","\\ \""