试图从样式中删除某些css元素

时间:2012-08-28 13:00:16

标签: css regex

我正在尝试从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上做到这一点?

4 个答案:

答案 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文件,这样可以更好地组织课程