在HTML的样式属性中允许一些CSS规则

时间:2014-06-11 09:14:35

标签: c# html css regex

你们可以建议我如何在C#中使用正则表达式删除HTML的syle属性中的一些CSS规则。

我只想要text-align和margin规则。否则用“”(空字符串)替换。

例如:

<p style="text-align: left; margin: 5px;color: red;"><strike>iiyuyuiy</strike></p>

会变成这样。

<p style="text-align: left; margin: 5px;"><strike>iiyuyuiy</strike></p>

颜色:红色;除去。

2 个答案:

答案 0 :(得分:1)

如果您熟悉jQuery,请尝试 .css()

JQuery的

$('selctor').css("color", ""); //passing value as null.

纯JS

document.querySelector('#selctor').style.color= '';

答案 1 :(得分:0)

正如您可能知道的那样,使用正则表达式解析html充满了危险。有人肯定会为你提供一个Dom解析器解决方案,所以这个答案主要是讨论事物的正则表达方面。

我通常喜欢提供一个正则表达式解决方案,但你提出的任务对于正则表达式来说确实是一个令人震惊的任务(尽管没有人责备你)。为什么呢?

分号不是CSS规则的完美分隔符

要匹配和删除规则,您需要知道停止的位置。对于CSS规则,这是分号。但是如果CSS规则除了终结符之外还有一个分号,那么正则表达式就会失败。我没有考虑到一个例子,但它经常被讨论。

在一个没有麻烦的分号的世界......

如果背靠墙并且冒号不是问题,那么这里有一种可以在C#中使用的方法,这要归功于其无限宽度的外观。

(?<=style="[^"]*)(?:(?:text-align|margin)[^";]*;|(\b[^";]*;)) 

在替换委托中,使用此正则表达式,我们将仅在设置捕获组1时将匹配替换为空字符串。

这次我不会提供示例代码,因为我想鼓励任何人这样做。不过,如果您对学习技术感兴趣,我强烈建议您阅读有关matching patterns except in certain contexts的问题。