我正在尝试从html style =“”属性中删除一些元素。
<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>
我想剪切此HTML以便删除 position元素和背景元素。
示例:
<div style="color: red; top:0; left: 0;">Hey</div>
我怎样才能在Regex上做到这一点?
答案 0 :(得分:4)
一个简单的正则表达式可能是:
/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:
后跟任何字符除分号,重复零次或多次直到引号(单身或双人)。
这涵盖了我们称之为&#34;没有分号&#34;
的情况以下代码应适用于所有情况,它未经过优化,仅用于清晰和示例。它由一系列电话组成:
$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;
答案 1 :(得分:1)
尝试类似的东西(虽然未经测试,所以不太确定表达式是否正确,但它应该给你足够的通道来解决问题的其余部分)
<?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);
?>
答案 2 :(得分:0)
这样的事情应该有效:
$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属性,然后你会为color属性做另一个。
$tag = preg_replace('/position:\s?[a-zA-Z];\s?/', '', $tag);
答案 3 :(得分:0)
对于未来,您可以尝试使用Chirpy - VS Add In For Handling Js, Css, DotLess, and T4 Files或类似的应用,尝试谷歌搜索CSS组合/压缩,他们重新组合所有重复的选择器和东西。
另外,我建议使用链接的css文件,这样可以更好地组织课程