Quiero tomar todas las palabras de una cadena y convertirlas en una matriz, pero no quiero dividir las oraciones que están entre comillas.
Mi código:
const content = 'this is a simple text that i "need to split into" arguments' const args = content.split(/ +/g) console.log(args) // Result: ['this', 'is', 'a', 'simple', 'text', 'that', 'i', '"need', 'to', 'split', 'into"', 'arguments']¿Qué necesito como resultado?
// Result: ['this', 'is', 'a', 'simple', 'text', 'that', 'i', 'need to split into', 'arguments']Un enfoque simple sería usar string match() junto con el patrón regex ".*?"|\w+ . Este patrón intentará primero con entusiasmo encontrar un próximo término doblemente citado. En su defecto, buscará una sola palabra. Este enfoque evita la posibilidad de consumir palabras que aparecen entre comillas dobles.
var content = 'this is a simple text that i "need to split into" arguments'; var matches = content.match(/".*?"|\w+/g); for (var i=0; i < matches.length; ++i) { matches[i] = matches[i].replace(/^"(.*)"$/, "$1"); } console.log(matches);Suponiendo que no haya comillas escapadas y que las comillas estén emparejadas correctamente.
const content = 'this is a simple text that i "need to split into" arguments' args = content.split(/\s(?=(?:[^"]*"[^"]*")*[^"]*$)/g); console.log(args);