首页 新闻 会员 周边

移除style中除color之外的所有css属性的C#正则表达式

0
悬赏园豆:50 [待解决问题]

需要处理的html字符串:

<span style="margin-left: 2em;color: #008000;font-size:14px;">博问,解决您的IT难题!</span>

希望正则表达式处理后的结果:

<span style="color: #008000;">博问,解决您的IT难题!</span>
问题补充:

目前找到了一个方法,但这个方法CPU占用比较高,代码如下:

[Fact]
public void StyleExceptColorTest()
{
    var text = "<span style=\"margin-left: 2em;color: #008000;font-size:14px;\">博问,解决您的IT难题!</span>";
    var styleExceptColor = new Regex(@"\sstyle=""([^"";]+;?)+""", RegexOptions.Compiled);
    text = styleExceptColor.Replace(text, m =>
    {
        foreach (var capture in m.Groups[1].Captures)
        {
            var value = capture.ToString();
            if (value.IndexOf("color:") >= 0)
            {
                return " style=\"" + value + "\"";
            }
        }
        return string.Empty;
    });
    Assert.Equal("<span style=\"color: #008000;\">博问,解决您的IT难题!</span>", text);
}
dudu的主页 dudu | 高人七级 | 园豆:30943
提问于:2012-04-15 20:18
< >
分享
所有回答(5)
0

如果利用DOM属性也就比较好解决了,像js的解决方法:


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;
}

 一定要用regex吗.....

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

Replace with style="$1"

 
zsounder | 园豆:2819 (老鸟四级) | 2012-04-15 20:51
0

var patrn = /^[((style)|(STYLE))][\"][.]{1,50}[\"]$/;

可以根据这改下。

az235 | 园豆:8483 (大侠五级) | 2012-04-16 08:32
0

正则表达式不怎么会写,但你可以用下面方式去实现啊:

$(document).ready(function() {

    var _color = $("span").css("color");   //获取span中的字段颜色
    $("span").removeAttr("style");         //清空span中的style属性值
    $("span").css("color", _color);          //重新设置span中的字体颜色(将原来的颜色重新设置给它)

});

KivenRo | 园豆:1734 (小虾三级) | 2012-04-16 13:47
0

这里提供一种解析字符串方法:

var text = "<span style=\"margin-left: 2em;color: #008000;font-size:14px;\">博问,解决您的IT难题!</span>";
var styleReg = new Regex(@"\sstyle=""(?<style>([^"";]+;?)+)""", RegexOptions.Compiled);
var match = styleReg.Match(text);
if (match.Success)
{
    var oldStyle = match.Groups["style"].Value;
    var styles = oldStyle.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
        .ToList()
        .Select(s => new
        {
            k = s.Split(':')[0],
            v = s.Split(':')[1]
        })
        .SingleOrDefault(s => s.k == "color");
    text = text.Replace(oldStyle, styles.k + ":" + styles.v + ";");
}
//<span style="color: #008000;">博问,解决您的IT难题!</span>
Console.WriteLine(text);

效率没有测试过

草根程序猿 | 园豆:129 (初学一级) | 2012-04-17 11:15
0

只要一个color干嘛要这样?直接获取color,然后赋值还不简单。其它都清空咯

tchong | 园豆:202 (菜鸟二级) | 2015-11-07 11:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册