如何使用正则表达式删除一些没有paticular css属性的css属性

本文关键字:css 属性 paticular 何使用 正则表达式 删除 | 更新日期: 2023-09-27 18:31:14

示例:只需保留颜色属性。

鉴于:

<span style="margin-left: 2em;color: #008000;font-size:14px;">some text</span>

输出:

<span style="color: #008000;">some text</span>

如何使用正则表达式删除一些没有paticular css属性的css属性

这个答案是在假设正在使用JavaScript的基础上编写的。虽然这个答案仍然有用(在这个假设下),但该语言已被指定为 C#。所以这个答案变得不正确了。

<小时 />

给定 HTML:

<span style="margin-left: 2em;color: #008000;font-size:14px;">some text</span>

以下 JavaScript 应该可以工作(目前未经测试):

var spans = document.getElementsByTagName('span'),
    color;
for (var i=0,len=spans.length;i<len;i++){
    color = spans[i].style.color;
    spans[i].removeAttribute('style');
    spans[i].style.color = color;
}​

JS小提琴演示。

下面是

使用 Xml.Linq 的解决方案草图:

XElement Load(string xml)
{
    using (var reader = new StringReader(xml))
        return XElement.Load(reader);
}
string ProcessStyles(string input)
{
    var root = Load(input);
    var allElements = root.Descendants();
    var styleAttributes = allElements.Select(e => e.Attribute(XName.Get("style"))).Where(a => a != null);
    foreach (var styleAttribute in styleAttributes)
    {
        var value = styleAttribute.Value;
        var newValue = ProcessCss(value);
        styleAttribute.SetValue(newValue);
    }
    return root.ToString();
}
string ProcessCss(string value)
{
    var cssTokens = value.Split(';').Select(t => t.Trim());
    // implement your filtering rules here
    var filtered = cssTokens.Where(t => t.StartsWith("color"));
    return String.Join(";", filtered);
}

该解决方案假定"样式"属性的某些结构。它不适用于更复杂的CSS(例如注释)。

另请注意,输入字符串必须是格式正确的 XML 文档。(HTML5 通常不必是格式正确的 XML)。

如果您确实想使用正则表达式来完成这项工作,这里有一些代码片段;但我仍然建议你用style对象来处理这个问题。

搜索style='"[^'"]*?([cC]olor:'s#[0-9a-fA-F]{1,6};?)[^'"]*?'"

替换为style="$1"