how to remove all tags in a string but not <a>
? and not the text inside them?
For example: <em>Bold</em><a>Go here</a>
should be: Bold<a>Go here</a>
答案 0 :(得分:2)
您可以使用
删除<...>
或<a>
以外的</a>
以外的所有字符串
<(?!\/?a>)[^>]*>
请参阅demo
不要忘记添加/i
不区分大小写的修饰符,以避免匹配<A>
。如果您不打算继续关闭</a>
,则可以使用<(?!a>)[^>]*>
。
答案 1 :(得分:1)
试试这个:
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 html = 'some html code';
html = strip_tags(html, '<a>');