从字符串</p>中删除<p> -tags的内容

时间:2014-08-25 13:28:50

标签: javascript regex

如果之前已经问过这个问题,我很抱歉,但到目前为止,我的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的一部分而且其次,这些变化必须限于此字符串。

1 个答案:

答案 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 

http://jsfiddle.net/a565cowm/

您无需向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);

http://jsfiddle.net/a565cowm/1/