首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过正则表达式删除没有属性的CSS类

通过正则表达式删除没有属性的CSS类
EN

Stack Overflow用户
提问于 2020-01-27 07:50:26
回答 2查看 180关注 0票数 1

我有这些CSS代码。

代码语言:javascript
复制
.class-1,
.class-2,
class-3 {
    }
.class-4,
class-5 {
}
.class-6,
class-7 {}
.not-empty-1 {font-size: 12;}
.not-empty-2 {
    font-size: 12;
}
.not-empty-3 {
font-size: 12;
}

我需要删除没有任何属性的CSS类。

我试过这个

代码语言:javascript
复制
.+\s{(\n.*|)}

https://regex101.com/r/8xFUDl/2

但是,它并没有像您在实际示例中看到的那样删除前面的类(如.class-1, .class-2, )。

任何解决方案都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-27 08:17:18

从最终模式的注释和信用到@阿努巴瓦,对于您可以使用的示例数据:

代码语言:javascript
复制
^(?:[^{}\r\n]*\R)*+[^{}]+{\s*}\s*

解释

  • 字符串的^开始
  • (?:非捕获群
    • [^{}\r\n]*\R匹配0+乘以任何字符,但{ }或换行符和Unicode换行符除外。

  • )*+关闭组并使用所有量量词重复0+时间
  • [^{}]+匹配1+乘以除{}以外的任何字符
  • {\s*}{}与中间的空格相匹配(注意\s也匹配换行符)
  • \s*匹配可能的尾随空格字符

Regex演示

票数 1
EN

Stack Overflow用户

发布于 2020-01-27 08:25:54

由于标记了PHP,我们可以执行一些字符串处理,使regex变得更简单,只需要匹配一个.some_class{some_props}样式,而忽略所有其他不遵循该属性的人。

我们可以忽略所有的空格、新行,只收集字符串中的文本,在每种样式之间都有一个空格作为分隔符。现在,我们可以对每一个爆炸,看看它是否符合我们想要的风格,其中有属性,并收集这些,并在以后内爆。

片段:

代码语言:javascript
复制
<?php

$str = '.class-1,
.class-2,
class-3 {
    }
.class-4,
class-5 {
}
.class-6,
class-7 {}
.not-empty-1 {font-size: 12;}
.not-empty-2 {
    font-size: 12;
}
.not-empty-3 {
font-size: 12;margin-top:25px;
}';

$new_str = '';

for($i=0;$i<strlen($str);++$i){
    if(strlen(trim($str[$i])) === 0) continue; // skip new lines,spaces, line feeds etc
    $new_str .= $str[$i];
    if($str[$i] == '}') $new_str .= ' ';
}

$results = [];

foreach(explode(" ",$new_str) as $css_style){
    if(preg_match('/^(.+?)\{(.+?)\}$/',$css_style,$matches)){
        $results[] = implode("\n",[$matches[1],"{\n ".$matches[2]."\n}"]);
    }
}


echo implode("\n\n",$results);

演示: https://3v4l.org/67mXE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59926947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档