我想從html style =「」屬性中刪除一些元素。試圖從樣式中刪除某些CSS元素
<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>
我希望削減該HTML所以它會刪除 位置元素和背景元素。
例子:
<div style="color: red; top:0; left: 0;">Hey</div>
我如何能做到這一點的正則表達式?
我想從html style =「」屬性中刪除一些元素。試圖從樣式中刪除某些CSS元素
<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>
我希望削減該HTML所以它會刪除 位置元素和背景元素。
例子:
<div style="color: red; top:0; left: 0;">Hey</div>
我如何能做到這一點的正則表達式?
一個簡單的正則表達式可以是:
/background:.*?;|position:.*?;/
如果您想只style屬性裏面檢查的標籤,請嘗試以下PHP測試代碼:
<?php
$str = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>';
echo preg_replace('/(<.*?style=.*?)background:.*?;|position:.*?;(.*?")/','$1$2',$str);
?>
您還要求匹配大小寫屬性沒有分號(唯一屬性,最後一個屬性)的情況。爲了匹配沒有分號的情況,我們應該假設這是唯一的屬性或者是最後一個。在這兩種情況下,我們將有以下的正則表達式的工作:
position:[^;]*?("|')
background:[^;]*?("|')
基本上,我問到跟任何字符關鍵字position:
或background:
分號匹配除了,重複零分或多次,直到報價(單或雙)。
這涵蓋了我們稱爲「無分號」的情況。
下面的代碼應該適用於所有情況,它沒有進行優化,僅用於清晰和示例。它由調用鏈的:
$str = preg_replace('/(<.*?style.*?)(position:[^;]*?)("|\')/','$1$3',$str);
$str = preg_replace('/(<.*?style.*?)(background:[^;]*?)("|\')/','$1$3',$str);
$str = preg_replace('/(<.*?style.*?)(position:.*?;)(.*?")/','$1$3',$str);
$str = preg_replace('/(<.*?style.*?)(background:.*?;)(.*?")/','$1$3',$str);
echo $str;
嘗試類似(雖然未經測試,所以不太清楚羯羊表達是正確的,但它應該給你足夠的路標解決問題的其餘部分)
<?php
$pattern = array();
$replacement = array();
$pattern[0] = '/position: [a-zA-Z]+;/';
$pattern[1] = '/background: #[a-zA-Z0-9]+;/';
$replacement[0] = '';
$replacement[1] = '';
$input_html = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>';
echo preg_replace($pattern, $replacement, $input_html);
?>
這樣的事情應該工作:
$tag = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>';
$tag = preg_replace('/background:\s?#[0-9a-zA-Z]{3,6};\s?/', '', $tag);
,只會是background屬性,那麼您需要的顏色屬性做一套。
$tag = preg_replace('/position:\s?[a-zA-Z];\s?/', '', $tag);
對於未來,你可以嘗試使用Chirpy - VS Add In For Handling Js, Css, DotLess, and T4 Files或類似的應用程序,嘗試使用Google CSS合併/壓縮,他們重新集結所有重複的選擇和東西。
另外我建議使用鏈接的css文件,這樣你可以更好地組織你的類
出於好奇:爲什麼RegEx爲此?你不能編輯源文件,或者用CSS覆蓋樣式嗎? – bfavaretto
另請參見:請使用您打算從(js?php?)運行正則表達式的語言重新提問您的問題。 – bfavaretto