需要处理的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); }
如果利用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"
var patrn = /^[((style)|(STYLE))][\"][.]{1,50}[\"]$/;
可以根据这改下。
正则表达式不怎么会写,但你可以用下面方式去实现啊:
$(document).ready(function() {
var _color = $("span").css("color"); //获取span中的字段颜色
$("span").removeAttr("style"); //清空span中的style属性值
$("span").css("color", _color); //重新设置span中的字体颜色(将原来的颜色重新设置给它)
});
这里提供一种解析字符串方法:
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);
效率没有测试过
只要一个color干嘛要这样?直接获取color,然后赋值还不简单。其它都清空咯