我有必须确定2点的要求。
<a></a>, <p></p>, <i></i>
标签的标签。
为此,我做了很多研发工作,但找不到确切的解决方案。
我最后找到的regx:(?!<p|a|i|>)(?<opentag><(?!/)[^>]*[^/]>)
但这也正在查找没有像<abc>
这样的结束标签的标签
注意::在此我要用空格替换开始和结束标签。
<abc>
应该是abc
示例:
输入字符串:
<br />
<ul id="matchMe" type="square">
<li>stuff...</li>
<li>more stuff</li>
<li>
<div>
<span>still more</span>
<ul>
<li>Another >ul<, oh my!</li>
<li>...</li>
</ul>
</div>
</li>
</ul>
<p>....</p>
<p class="hhh">....</p>
<customTag1> Hello <CustomTag2>
输出字符串:
stuff...
more stuff
still more
Another >ul<, oh my!
...
<p>....</p>
<p class="hhh">....</p>
customTag1 Hello CustomTag2
在此示例中,我不想对p
标签做任何事情,但是所有其他具有自闭标签或闭标签的标签都应替换为空白。
customTag1
和CustomTag2
都是自定义标签,看起来像HTML的开始标签,但没有结束标签。对于这些标签,我只希望仅删除<,>
符号。
很少有人回答,但没有完全解决 https://stackoverflow.com/a/7564061/4813631 https://stackoverflow.com/a/10267932/4813631
谢谢
答案 0 :(得分:0)
它应该起作用:
let html = `<br />
<ul id="matchMe" type="square">
<li>stuff...</li>
<li>more stuff</li>
<li>
<div>
<span>still more</span>
<ul>
<li>Another >ul<, oh my!</li>
<li>...</li>
</ul>
</div>
</li>
</ul>
<p>....</p>
<p class="hhh">....</p>
<customTag1> Hello <CustomTag2>
`
let allInitialsTags = html.match(/<([a-zA-Z\d]*(?=\s)*(?!\/))/g)
allInitialsTags = allInitialsTags.map(el=>el.replace("<",''))
let allEndTags = html.match(/(<\/[a-zA-Z\d]*\s*)/g)
allEndTags = allEndTags.map(el=>el.replace("</",''))
const tagWithNotClosingTag = []
allInitialsTags.forEach(el=>{
if(!allEndTags.includes(el)){
tagWithNotClosingTag.push(el)
}
})
tagWithNotClosingTag.forEach(el=> {
html = html.replace(RegExp(`<${el}>`,'g'),`${el}`)
})
const result = html.replace(/<[^(p|a|i)]?[^(\/p|\/a)?][^>]*>/g,"")
console.log(result)