En JavaScript, ¿cómo inserto un carácter de nueva línea antes de cada aparición de un delimitador de una lista de delimitadores?
Ejemplo:
const delimiters = ['Q) ', 'A) ', 'B) ', 'C) ', 'E) '] const str = 'Some textC) Some textE) Some text'Quiero crear la Cadena:
Some text C) Some text E) Some textPuedes resolver esto con un descarado .replaceAll y cadenas simples en lugar de expresiones regulares 🚀
const delimiters = ['Q) ', 'A) ', 'B) ', 'C) ', 'E) ']; const start = 'Some textC) Some textE) Some text'; let output = start; for (const str of delimiters) { output = output.replaceAll(str, "\n"+str); } console.log(output);Creo que la primera respuesta publicada brinda la mejor y más simple solución, pero aquí hay un ejemplo de cómo hacerlo con una expresión regular.
const delimiters = ['Q) ', 'A) ', 'B) ', 'C) ', 'E) '] const str = 'Some textC) Some textE) Some text'; const pattern = `(?=${delimiters.join('|').replaceAll(')', '\\)')})`; console.log(`Pattern: "${pattern}"`); console.log(str.replace(new RegExp(pattern, 'g'), '\n'));Tenga en cuenta que se debe tener cuidado de escapar cualquier carácter en los delimitadores que tengan un significado especial en una expresión regular.
Arriba, solo uso .replaceAll(')', '\\)') para escapar del ) después de unir los delimitadores con el carácter de alternancia de expresiones regulares | en una anticipación positiva (?=alternative1|alternative2|etc) antes de pasarlo al constructor RegExp .
Tenga en cuenta también que este método de unión con | no daría como resultado una expresión regular que funcionara de manera confiable si un delimitador en sí mismo contuviera el | personaje.