javascript删除html标记但不包含内容,而不是<a> tags with regex

时间:2015-09-04 14:36:01

标签: javascript regex

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>

2 个答案:

答案 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>');

来源:http://phpjs.org/functions/strip_tags/