Как удалить элемент стиля из встроенного стиля с помощью регулярного выражения?

Я пытаюсь удалить только одно свойство, 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, "");

Это удаляет все встроенные стили. Как я могу просто удалить float?

-84
источник поделиться
5 ответов

Это должно удалить все поплавки:

data = Regex.Replace(data, @"(style=\"".*?)(float:\s*[^;\""]+;?)(.*?\"")", "$1$3", RegexOptions.IgnoreCase)
+13
источник

Этот код удаляет все атрибуты в элементе стиля, кроме первого атрибута

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 + @"""";
    }));

Этот код удаляет только атрибут float из элемента стиля:

var result2 = Regex.Replace(test, "(style=\".*?;).*(float:.*?;)\"", new MatchEvaluator((m) =>
    {
        return m.Groups[1].Value + @"""";
    }));
+9
источник

Мы можем добиться этого с помощью манипуляции с 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 манипуляции плюс regex replace:
преимущество: просто нужно совместить float, а не стиль и float

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);
+1
источник

попробуйте это: этот код удаляет все атрибуты в элементе стиля, кроме первого атрибута

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 + @"""";
    }));
This code removes only float attribute from style element:

var result2 = Regex.Replace(test, "(style=\".*?;).*(float:.*?;)\"", new MatchEvaluator((m) =>
    {
        return m.Groups[1].Value + @"""";
    }));
0
источник

В значении группы совпадений вы можете заменить его.

(float:.*?;)

1.  float:right;
-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос