我需要在textarea中允许某些HTML标记并忽略所有其他标记。 例如< b>将被允许,但如果< h1>在那里我希望标签被其内部文本替换。
< b>一些文字< / B个将是:一些文字 和< h1>一些文字< / h1>将是:一些文字
我还希望从所有允许的标签中提取所有属性。
正则表达式可以吗?
更新:我尝试了这个否定前瞻<(?!b|br|p|i|u|sup|sub|br|ul|ol|li|a).*(\s[^>]*)?>
,但它与整个文档相匹配。如果有人能够解决那个负面的前瞻,那将会很棒。
答案 0 :(得分: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;