【问题标题】:Regex: extract CSS styles from CSS file正则表达式:从 CSS 文件中提取 CSS 样式
【发布时间】:2012-10-09 10:35:00
【问题描述】:

我有一个很大的 CSS 文件,其中包含我们内部框架所需的所有 CSS,但我只需要几个样式。所以我想提取我想要的样式。我使用正则表达式来提取它们:

cssFileContent.scan(/\.#{cssName}.*?\{.+?\}/im)

在 Ruby 中,scan 表示从字符串中提取模式,cssName is 是 CSS 样式名称 i - 不区分大小写 m - 点匹配所有内容,以便 \n 也将被匹配

它给了我一些样式块,但每次都跳过一个。比如我有.abc-style { }.def-style { },但是结果是这样的:

.abc-style {

}

}

所以 def-style 被跳过了。

有人可以告诉我为什么吗?以及如何纠正?

【问题讨论】:

    标签: ruby regex perl


    【解决方案1】:

    我不会使用正则表达式,而是使用 CSS 解析器来执行此操作。

    CPAN 上有很多可供选择,例如CSSCSS::SACCSS::Tiny & CSS::Croco。选择最适合您需求的一种。

    这是一个使用CSS::Tiny的示例...

    use strict;
    use warnings;
    use CSS::Tiny;
    
    my $css = CSS::Tiny->read('your_stylesheet.css');
    my $new = CSS::Tiny->new;
    
    # styles I want to extract
    $new->{$_} = $css->{$_} for qw/.abc-style .def-style/;
    
    $new->write('extracted_styles.css');
    

    【讨论】:

    • 感谢您的选择:)
    【解决方案2】:

    尝试排除右括号并像这样使集合变得贪婪:

    cssFileContent.scan(/\.#{cssName}.*?\{[^\}]+\}/im)
    

    【讨论】:

      猜你喜欢
      • 2014-01-18
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 2018-10-11
      • 2012-06-28
      相关资源
      最近更新 更多