Supuestamente tengo una cadena como esta que irá a mi HTML:
<div>Wakanda Forever</div> <span class="movie">Black Panther</span> Movies movies movies <span class="movie">Spider man...La última etiqueta de intervalo no está cerrada.
En expresiones regulares y JavaScript, ¿cómo puedo eliminar el <span class="movie"> no cerrado de <span class="movie">Spider man... o cerrarlo con una etiqueta </span> ?
Mi solución recomendada sería hacer lo que hace el navegador: analizar la cadena en un DOM (de una manera similar, difusa e indulgente) y luego volver a convertir ese DOM en HTML.
En un entorno de navegador, esto es especialmente fácil porque puede dejar que el propio navegador lo haga por usted, escribiendo el HTML incorrecto en el HTML innerHTML de un elemento y luego leyéndolo, y el navegador lo habrá solucionado por usted:
const badHtml = ` <div>Wakanda Forever</div> <span class="movie">Black Panther</span> Movies movies movies <span class="movie">Spider man... ` const element = document.createElement('i') element.innerHTML = badHtml const result = element.innerHTML console.log(result)En node.js, podría usar una biblioteca como cheerio :
import cheerio from 'cheerio' const badHtml = ` <div>Wakanda Forever</div> <span class="movie">Black Panther</span> Movies movies movies <span class="movie">Spider man... ` const $ = cheerio.load(badHtml) const result = $.html() console.log(result)