如果之前已经问过这个问题,我很抱歉,但到目前为止,我的stackoverflow搜索没有给我带来我需要的答案。 在不确定的时间间隔,我的JavaScript正在接收包含HTML的字符串。
一个简单的例子:
<p class='commentator'>Person A</p> Comment of Person A <br/> <p class='commentator'> Person B </p> Comment of person B
当满足某些条件时,应从字符串中删除所有<p>
标记及其内容。我知道如何使用以下代码删除<p>
代码:
stringComments= stringComments.replace(/<\/?p[^>]*>/g, "");
如何修改该正则表达式以包含<p>
标记的内容? (regex= .*?)
我的预期输出应如下所示:
Comment of Person A <br/> Comment of person B
注意:那些引用jQuery的remove()
。这是行不通的,首先是因为它不是DOM的一部分而且其次,这些变化必须限于此字符串。
答案 0 :(得分:5)
使用jQuery - 不要尝试用正则表达式解析HTML,它会给你带来麻烦。有很多方法可以做到,但这是一种方式:
var s = "<p class='commentator'>Person A</p> Comment of Person A <br/> <p class='commentator'> Person B </p> Comment of person B";
var elem = $("<div>" + s + "</div>");
var p = elem.find("p");
p.remove();
console.log(elem[0].innerHTML);
日志:
Comment of Person A <br> Comment of person B
您无需向DOM添加内容以供jQuery使用。 jQuery可以处理断开连接的HTML片段。
为了更安全,您甚至可能希望使用选择器来定位类而不是<p>
标记。这样,如果它更改为其他某个标记,或者<p>
标记被添加到您想要的内容中,您就不会意外地删除错误的部分。
var p = elem.find(".commentator");
编辑:为了完整性,应该注意这不是限于jQuery的技巧。你可以在vanilla JS中做同样的事情(浏览器兼容性不能承受):
var div = document.createElement("div");
div.innerHTML = s;
var p = div.getElementsByTagName("p"); // or getElementsByClassName if you prefer
while(p.length > 0) {
div.removeChild(p[0]);
}
console.log(div.innerHTML);