2012-10-18 74 views
1

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

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

在Ruby中,scan手段提取字符串的图案,cssName is的CSS样式名称 我 - 不区分大小写 米 - 点匹配的一切,让\ n将被太匹配

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

.abc-style { 

} 

} 

如此Def风格被跳过。

有人可以给我任何一点为什么?以及如何纠正?

回答

2

尝试排除右括号,使收集贪婪是这样的:

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

连结此上rubular为lulz:http://rubular.com/r/VfoYBJXsIj –

+0

谢谢! '[^}]'完美无缺! – texasbruce

3

而不是使用正则表达式我会用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'); 
+0

感谢您的替代:) – texasbruce