我有一个HTML字符串,我需要删除所有HTML标记&amp;除<p>
之外的内联样式。
var html = '<p style="padding:0px;">Outside<strong style="padding:0;margin:0;">hello</strong></p>';
我正在使用以下javascript函数。它的工作原理
function strip_tags(input, allowed) {
allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
}
var striped = strip_tags(html, '<p>');
console.log(striped);
以上代码输出
<p style="padding:0px;">Outsidehello</p>
但是我还需要允许标签的属性进行条带化。
例如,我需要输出为
<p>Outsidehello</p>
我尝试了几个正则表达式,但我无法使其正常工作。
我试过的一些正则表达式
var striped = html.replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/gi",'<$1$2>');
var striped = html.replace('/<(\w+)[^>]*>/', '<$1>');
知道如何剥离允许的HTML标记的所有属性吗?
答案 0 :(得分:1)
这样的事可能吗?
IPP_SET_PRINTER_ATTRIBUTES
答案 1 :(得分:1)
您需要replace()
两次使用两种不同的正则表达式。
1-开始于:
<(?!/?(p))\w*[^<>]*>
删除所有其他标记。
2-然后继续:
(<p)[^<>]*
去除属性(如果有的话)。
将这个想法全部放在一个函数中:
function strip_tags(text, tags) {
return text.replace(new RegExp("<(?!/?(" + tags.join('|') + "))\\w*[^<>]*>", "gi"), '')
.replace(new RegExp("(<" + tags.join('|') + ")[^<>]*", "gi"), "$1");
}
JS代码:
var text = `<p style="padding:0px;">Outside
<td class="comment-text">
<div style="display: block;" class="comment-body">
<span class="comment-copy">Do you mean <code><p/></code> ?</span>
– <a href="/users/557597/sln"
title="19,684 reputation"
class="comment-user">sln</a>
</div>
</td>
</tr>
<strong style="padding:0;margin:0;">hello</strong></p>`;
function strip_tags(text, tags) {
return text.replace(new RegExp("<(?!/?(" + tags.join('|') + "))\\w*[^<>]*>", "g"), '')
.replace(new RegExp("(<" + tags.join('|') + ")[^<>]*", "g"), "$1");
}
console.log(strip_tags(text, ['p', 'div']))
var text = '<p style="padding:0px;">Outside <strong style="color:red;">hello</strong></p>';
console.log(strip_tags(text, ['p']))
&#13;