Quiero envolver cada signo en la matriz dada dentro de una etiqueta de intervalo para poder representarlo en DOM:
Aquí está la matriz de signos:
const signs = ['!!', '?!', '!?', '...', '..', '.', '?', '!', ':', '؟!', '!؟', '؟'];Puedo reemplazar cada signo individualmente así:
result = result.replace(/([\:])/g, "<span class='some-class'> :</span>");El código anterior puso: firmar dentro de un lapso.
¿Cómo puedo hacer esto para todos los signos de matriz sin codificarlos?
Puedes usar
let result = "!! ?! !? ... .. . ? ! : ؟!, !؟ ؟"; const signs = ['!!', '?!', '!?', '...', '..', '.', '?', '!', ':', '؟!', '!؟', '؟']; signs.sort((a, b) => b.length - a.length); const regex = new RegExp(signs.map(x => x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|'), 'g'); result = result.replace(regex, "<span class='some-class'> $&</span>"); console.log(result)Aquí,
signs.sort((a, b) => b.length - a.length) ordena los elementos de la matriz de signs por longitud en orden descendentesigns.map(x => x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')) - escapa todos los caracteres especiales en los elementos para que coincidan con caracteres literales dentro de una expresión regular....join('|') - crea una expresión regular de alternancianew RegExp(..., 'g') - define un objeto RegExp que coincide con todas las ocurrencias de patrones en la cadena$& en el patrón de reemplazo inserta el valor de coincidencia.Podrías usar:
result = signs.map(sign => "<span class='some-class'> " + sign + "</span>");o si desea usar expresiones regulares, sería demasiado complicado:
result = signs.map(sign => sign.replace(/(.+)/g, "<span class='some-class'> $1</span>"));