1

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

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

在 Ruby 中,scan意味着从字符串中提取模式,cssName isCSS 样式名称 i - 不区分大小写 m - 点匹配所有内容,因此 \n 也将被匹配

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

.abc-style {

}

}

所以 def-style 被跳过。

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

4

2 回答 2

3

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

CPAN上有很多可供选择,例如CSS, & 。选择最适合您需求的一种。 CSS::SACCSS::TinyCSS::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');
于 2012-10-19T13:56:48.193 回答
2

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

cssFileContent.scan(/\.#{cssName}.*?\{[^\}]+\}/im)
于 2012-10-18T21:02:43.247 回答