Estoy tratando de analizar una matriz usando Javascript dada una cadena con guión.
- foo - barMe he acercado mucho a descifrarlo. Lo he recortado hasta donde obtengo los dos elementos usando este código.
const chunks = input.split(/\ ?\-\ ?/); chunks = chunks.slice(1);Esto recortaría la entrada anterior a esto.
["foo\n", "bar"]
Probé muchas soluciones para sacar el carácter de nueva línea de la cadena, independientemente de la cantidad de elementos en la matriz, pero nada funcionó. Agradecería mucho si alguien pudiera ayudarme a solucionar este problema.
Puede hacer un bucle así y eliminar los caracteres de nueva línea.
const data = ["foo\n", "bar"] const res = data.map(str => str.replaceAll('\n', '')) console.log(res)En lugar de recortar después de la división. Divida sabiamente y luego asigne para reemplazar la cadena no deseada. No es necesario repetir varias veces.
const str = ` - foo - bar`; let chunks = str.split("\n").map(s => s.replace(/^\W+/, "")); console.log(chunks) let chunks2 = str.split("\n").map(s => s.split(" ")[2]); console.log(chunks2)Por ejemplo, podría dividir, eliminar todas las entradas vacías y luego recortar cada elemento para eliminar también todos los espacios en blanco iniciales y finales, incluidas las líneas nuevas.
Tenga en cuenta que no tiene que escapar del espacio y el guión.
const input = `- foo - bar`; const chunks = input.split(/ ?- ?/) .filter(Boolean) .map(s => s.trim()); console.log(chunks);O el mismo enfoque eliminando solo las nuevas líneas:
const input = `- foo - bar`; const chunks = input.split(/ ?- ?/) .filter(Boolean) .map(s => s.replace(/\r?\n|\r/g, '')); console.log(chunks);En lugar de dividir, también puede usar una coincidencia con un grupo de captura:
^ ?- ?(.*)El patrón coincide:
^ Comienzo de cadena?- ? Coincidencia - entre espacios opcionales(.*) Capturar grupo 1, hacer coincidir el resto de la línea const input = `- foo - bar`; const chunks = Array.from(input.matchAll(/^ ?- ?(.*)/gm), m => m[1]); console.log(chunks);