在JavaScript中,我使用此正则表达式从文本字符串中删除所有HTML标记:
t.replace(/<\/?[^>]+>/g, '');
现在我需要相同的东西,但它应该保留以下标签(它们不应该被替换):
<strong>
</strong>
<b>
</b>
你能帮帮我吗?我通常不使用正则表达式,所以如果这听起来太简单,请原谅。
答案 0 :(得分:4)
只需使用否定的先行断言。
var s = '<strong> </strong>\n<b> </b> <h1> <h2> <a href="foo.com">';
alert(s.replace(/<(?!\/?b>|\/?strong>)[^>]+>/g, ''));
&#13;
开始时的
(?!\/?b>|\/?strong>)
否定前瞻声称匹配,即<
不会被/b>
或b>
或/strong>
或strong>
字符串。
答案 1 :(得分:1)
你也可以试试这个:
t.replace(/<(?!\/?(b|strong)(?=>|\s.*>))\/?.*?>/g, '')
答案 2 :(得分:1)
我会通过DOM来解决这个问题:
var s = '<ol><li>hello </li><li><b>world</b></li></ol>';
var node = document.createElement('div');
node.innerHTML = s;
function clean(node, allowed, target)
{
for(var i = 0; i < node.childNodes.length; ++i)
{
var child = node.childNodes[i];
if (child.nodeType === 1) {
clean(child, allowed, target);
if (allowed.indexOf(child.nodeName) === -1) {
[].forEach.call(child.childNodes, function(item) {
target.appendChild(item);
});
node.removeChild(child);
--i;
}
}
}
}
clean(node, ['STRONG', 'B'], node);
console.log(node.innerHTML);
您还可以通过在JavaScript中实现strip_tags()
来选择更脏的版本。