Tengo una cadena HTML que contiene nombres:
<div class=\"ExternalClassBE95E28C1751447DB985774141C7FE9C\"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>Y me gustaría eliminar todas las etiquetas html y poner '&' entre los nombres, pero no al final del último como:
Not desired: Tina Schmelz & Sascha Balke & Desired: Tina Schmelz & Sascha BalkeUtilicé la propiedad regex y string replace.
Podría hacerlo usando reemplazar todas las etiquetas <br> con ' & ' y luego eliminar todas las etiquetas html usando estos códigos:
let mytext = '<div class=\"ExternalClassBE95E28C1751447DB985774141C7FE9C\"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>'; mytext = mytext.replaceAll(/<br>/gi, ' & '); mytext = mytext.replaceAll(/<.*?>/gi, ''); console.log(mytext)Mi pregunta: ¿cómo puedo eliminar el último ' & '? O, ¿alguien sabe mejor RegEx para completar todo en una línea? :)
Puedes usar
.replace(/<br>(?=(?:\s*<[^>]*>)*$)|(<br>)|<[^>]*>/gi, (x,y) => y ? ' & ' : '')Vea la demostración de JavaScript:
const text = '<div class="ExternalClassBE95E28C1751447DB985774141C7FE9C"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>'; const regex = /<br>(?=(?:\s*<[^>]*>)*$)|(<br>)|<[^>]*>/gi; console.log( text.replace(regex, (x,y) => y ? ' & ' : '') );Detalles :
<br>(?=(?:\s*<[^>]*>)*$) - un <br> seguido de cero o más apariciones de cero o más espacios en blanco y luego una subcadena <...> hasta el final de la cadena| - o(<br>) - Grupo 1: etiqueta <br>| - o<[^>]*> - < , cero o más caracteres que no sean < y > y luego un > .Podrías reemplazar todas las etiquetas con el código que ya escribiste; luego use la función de división para dividir los nombres y la de unir para insertar el & en los puntos deseados.
const myTextParsed = [] let myText = '<div class=\"ExternalClassBE95E28C1751447DB985774141C7FE9C\"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>'; let myTextArray = myText.split('<br>'); myTextArray = myTextArray.map(ta => { const temp = ta.replaceAll(/<.*?>/gi, '') if (temp.length > 0) { myTextParsed.push(temp) } }); myText = myTextParsed.join(' & '); console.log(myText)