我有如下的字符串:
"<p>First sentence</p><p><br></p><p> second sentence</p><p><br></p><p><br></p><p><br></p><p><br></p>"
我想在<p><br></p>
个n
个标签后删除字符串中<p>
的所有最后一次出现。
预期结果:
"<p>First sentence</p><p><br></p><p> second sentence</p>"
答案 0 :(得分:0)
当你可以使用内置的DOM解析器时,不需要正则表达式。
您需要检查当前p br
之后的元素是否包含带有textContent的元素。
function removeBlanksAtEnd(str) {
var el = document.createElement("div");
el.innerHTML = str;
console.log(el.querySelectorAll("p br").length);
el.querySelectorAll("p br").forEach( s => {
if ( !hasAnyContentAfterThisNode(s.parentNode) )
{
s.parentNode.parentNode.removeChild(s.parentNode);
}
});
return el.innerHTML;
}
<强>演示强>
var str = `<p>First sentence</p><p><br></p><p> second sentence</p><p><br></p><p><br></p><p><br></p><p><br></p>`;
function removeBlanksAtEnd(str) {
var el = document.createElement("div");
el.innerHTML = str;
console.log(el.querySelectorAll("p br").length);
el.querySelectorAll("p br").forEach( s => {
if ( !hasAnyContentAfterThisNode(s.parentNode) )
{
s.parentNode.parentNode.removeChild(s.parentNode);
}
});
return el.innerHTML;
}
function hasAnyContentAfterThisNode(el)
{
while( el.nextSibling )
{
var textValue = el.nextSibling.textContent.trim();
console.log(textValue);
if ( textValue.length > 0 )
{
return true;
}
el = el.nextSibling;
}
return false;
}
console.log(removeBlanksAtEnd(str));
答案 1 :(得分:0)
"<p>First sentence</p><p><br></p><p> second sentence</p><p><br></p><p><br></p><p><br></p><p><br></p>".replace(/<p><br><\/p>?<p><br><\/p>/g,"")
容易, 选我,我是答案
<强>演示:强> https://codepen.io/anon/pen/JLzvYz