如何删除或关闭 JavaScript 中未关闭的 HTML?

How to remove or close unclosed HTML in JavaScript?

据说我有一个像这样的字符串将转到我的 HTML:

<div>Wakanda Forever</div> <span class="movie">Black Panther</span>
Movies movies movies 
<span class="movie">Spider man...

最后一个 span 标签没有关闭。

在正则表达式和 JavaScript 中,如何从 <span class="movie">Spider man... 中删除未闭合的 <span class="movie"> 或使用 </span> 标记将其闭合?

Using regular expressions to do any sort of HTML manipulation is almost always a bad idea.

我推荐的解决方案是做浏览器所做的事情:将字符串解析为 DOM(以类似的模糊、宽容的方式),然后将 DOM 转回 HTML.

在浏览器环境中,这特别容易,因为您可以让浏览器自己为您做这件事,方法是将错误的 HTML 写入元素的 innerHTML,然后再读回 -浏览器会为您修复它:

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)

在 node.js 中,您可以改用 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)