1

内部フレームワークに必要なすべての CSS を含む大きな CSS ファイルがありますが、必要なのはいくつかのスタイルだけです。だから私は自分が望むスタイルを抽出したい。正規表現を使用してそれらを抽出しました。

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

Ruby では、scan文字列からパターンを抽出することを意味しcssName is、CSS スタイル名 i - 大文字と小文字を区別しません m - ドットはすべてに一致するため、\n も一致します

いくつかのスタイル ブロックが表示されますが、毎回 1 つスキップします。たとえば、 と が.abc-style { }あります.def-style { }が、結果は次のようになります。

.abc-style {

}

}

したがって、def-style はスキップされます。

誰かが私に理由を教えてもらえますか? そして、どのように修正するのですか?

4

2 に答える 2

3

正規表現を使用する代わりに、CSSパーサーを使用してこれを行います。

CPANには、たとえば、、、など、選択CSSできるCSS::SACものがたくさんありCSS::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');
于 2012-10-19T13:56:48.193 に答える
2

閉じ括弧を除外して、コレクションを次のように貪欲にします。

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