Tengo argumentos que el usuario pasará para un comando. Cada argumento de un comando se separará con un espacio, que representará un nuevo argumento. Ejemplo: "arg1 arg2 arg3" se convierte en ["arg1", "arg2", "arg3"] donde la salida es una matriz JS. Esto se puede hacer con un simple .split(" ").
Sin embargo, mi problema comienza cuando intento formatear una matriz como argumento de comando. Mi objetivo es permitir que el usuario ingrese un argumento en el formato de una matriz (por ejemplo, comienza con [ puede contener varios elementos separados por un , termina con un ] ), por ejemplo: "arg1 [elem1, elem2] arg3" convierte a ["arg1", ["elem1", "elem2"], "arg3"] donde la matriz interna y externa es una matriz JS.
Intenté usar JSON.Parse() sin embargo, cada elemento requeriría que el usuario tuviera " al comienzo de cada elemento, lo cual es demasiado complejo para el usuario y no es esencial para ingresar. Además, es posible que los elementos no siempre tengan la intención de ser una string y puede ser booleano, numérico o de tipo personalizado.
Hasta el momento, esta ha sido mi mejor solución, pero no cumple con algunos requisitos y tampoco es funcional cuando una matriz tiene un espacio dentro.
s.split(/[\[\]]|\s+/).filter(arg => arg.length > 1);Se me ocurrieron algunas otras soluciones, pero a todas les falta una cosa u otra en la especificación requerida establecida anteriormente. Una solución que pueda manejar matrices anidadas sería buena, sin embargo, no es esencial y podría hacer que la solución sea mucho más compleja de lo que debe ser.
Supongamos que no hay personajes divertidos como entrada. También se permite anidar ahora.
var str = "arg1 [ elem1 , elem2,elem3 ] arg3"; console.log(str) str = str.replace(/\s*,\s*/g, ','); str = str.replace(/\[\s*/g, '['); str = str.replace(/\s*\]/g, ']'); var arr = str.split(/\s+/); arr = arr.map(function(elem) { return elem.charAt(0) == '[' ? elem.slice(1, -1).split(",") : elem; }) console.log(arr)