使用JavaScript

时间:2017-04-25 20:37:17

标签: javascript regex

我有一个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标记的所有属性吗?

2 个答案:

答案 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代码:

&#13;
&#13;
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>&lt;p&#47;&gt;</code> ?</span>
      &ndash;&nbsp;<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;
&#13;
&#13;