0

我需要在我的文本区域中允许某些 HTML 标签并忽略所有其他标签。例如 < b > 将被允许,但如果 < h1 > 在那里,我希望将标签替换为其内部文本。

<b>一些文本</b>将是: 一些文本 和<h1>一些文本</h1>将是:一些文本

我还希望从所有允许的标签中提取所有属性。

这在正则表达式中可能吗?

更新:我尝试了这种否定的前瞻<(?!b|br|p|i|u|sup|sub|br|ul|ol|li|a).*(\s[^>]*)?>,但它与整个文档匹配。如果有人可以解决这种消极的前瞻问题,那就太好了。

4

1 回答 1

0

我找到了解决办法。

以防其他人将来需要这个,这就是我所做的。

        // remove HTML comments
        Regex regex = new Regex(@"<!--[^-]*-->", RegexOptions.IgnoreCase);
        input = regex.Replace(input, "");
        // remove unsupported tags
        regex = new Regex(@"</?((?!p|i|u|sup|sub|br|ol|li|a|b|/)|((p|i|sup|sub|br|ul|ol|li|a|b)[^<>\s]+))[^<>]*?>", RegexOptions.IgnoreCase);
        input = regex.Replace(input, "");
        // remove attribiutes
        regex = new Regex(@"(<[^\s]+)(\s[^<>]*)(>)", RegexOptions.IgnoreCase);
        input = regex.Replace(input, m => m.Groups[1].Value + m.Groups[3].Value);
        return input;
于 2013-09-21T04:57:16.373 回答