如何使用正则表达式从内联样式中删除样式元素?

时间:2015-06-11 20:55:54

标签: javascript c# html css regex

我尝试从内联样式中仅删除一个属性float及其值。我想从这开始:

<div id="first_line_info" style="width:490px; float:right;"> </div>

并且像这样:

<div id="first_line_info" style="width:490px"> </div>

到目前为止,我已经尝试过这段代码:

Regex noInlineStylePattern = new Regex("style=\"[^\"]*\"", RegexOptions.IgnoreCase);
data = noInlineStylePattern.Replace(data, "");

这将删除所有内联样式。我怎样才能删除浮动?

4 个答案:

答案 0 :(得分:13)

这应该删除所有花车:

data = Regex.Replace(data, @"(style=\"".*?)(float:\s*[^;\""]+;?)(.*?\"")", "$1$3", RegexOptions.IgnoreCase)

答案 1 :(得分:9)

此代码删除样式元素中除第一个属性

以外的所有属性
string test = @" <div id=""first_line_info"" style=""width:490px; float:right;""> </div>";

var result = Regex.Replace(test,"(style=\")(.*?;).*\"", new MatchEvaluator((m)=>
    {
        return m.Groups[1].Value + m.Groups[2].Value + @"""";
    }));

此代码仅从样式元素

中删除浮动属性
var result2 = Regex.Replace(test, "(style=\".*?;).*(float:.*?;)\"", new MatchEvaluator((m) =>
    {
        return m.Groups[1].Value + @"""";
    }));

答案 2 :(得分:1)

我们可以通过dom操作实现相同的目标:

var dom = document.createElement('div');
dom.innerHTML = `<div id="first_line_info" style="width:490px; float:right;"> </div>
<div id="first_line_info1" style="width:490px;float:left;float:right"> </div>
`;
var elem = dom.getElementsByTagName('div');
var len=elem.length;

for(var i=0;i<len;i++){
  elem[i].style.float = null;
  //float removed
}

console.log(dom.innerHTML);

从dom操作加正则表达式替换方法:
优点:只需要匹配浮动而不是样式和浮动

var dom = document.createElement('div');
dom.innerHTML = `<div id="first_line_info" style="width:490px; float:right;"> </div>
<div id="first_line_info1" style="width:490px; float:right;float:left"> </div>
`;
var elem = dom.getElementsByTagName('div');
var len=elem.length;

for(var i=0;i<len;i++){    
  var style=elem[i].getAttribute('style');
  var regex = /(float:\w+;*)/g;

  style = style.replace(regex, "");
  //float removed

  elem[i].setAttribute('style',style);    
}

console.log(dom.innerHTML);

答案 3 :(得分:-1)

在匹配组值中,您可以替换它。

(float:.*?;)

1.  float:right;