如何删除或关闭 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)
据说我有一个像这样的字符串将转到我的 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)