2

@media ルールをスタイル シートから引き出してキャッシュし、適切な解像度で JS を使用して IE<9 に適用しようとしています。

例えば:

.../*default rules*/...
#work-head { background-image: url("/images/work-art-supplies-med.png"); height: 168px; width: 213px; }        

}

@media screen and (min-width : 657px) {


.welcome h1 { border: 0; margin-bottom: 0; text-align: center; }

.welcome p { font-size: 13px; font-size: 1.3rem; }

.../*more rules*/...

}

.../*more rules*/...

現時点では、最小幅とそれ以降のすべて (スタイル シートの最後まで) を次のように取得しています。

/657px\)(\s|\n)*\{/

次のように、メディアクエリの最後にある二重の「}}」を見つけて、メディアクエリのエンドポイントを取得します。

/}[^{]*}/

これは機能しますが、各 IE スタイル シートを作成するには 2 つの正規表現といくつかの文字列操作が必要であり、それが面倒に感じます。

メンテナンスを容易にするために、IE のルールを個別のファイルに分割することを避けようとしています。また、CSS が圧縮される前と後の両方を抽出できるように、正規表現が必要だと思います (現在は圧縮されていますが、明らかに最適とはほど遠いです)。

では、これら 2 つの式を 1 つに結合する方法を教えてください。

基本的に、リテラルまたはパターンと別のリテラルまたはパターンの間ですべてを一致させるにはどうすればよいですか?

また、これはIE<9で動作する必要があるため、先読みと後読みはオプションではないと思います(?)

4

2 に答える 2

1

私はこの質問を忘れていました:-)、しかし、誰かが興味を持っている場合:

/657px\)(\s|\n)*\{(.|\n)+?(}[^{]*})/

トリックを行います(ほぼ)。http://regexpal.com/では完全に動作しますが、IE<9 では、マッチの末尾が "}}" ではなく "} }, , ,} } になります。

とにかく部分文字列にする必要があるので大したことではありませんが、IEでもregexpalと同じように機能させる方法を誰かが知っているかどうか聞いてみたいと思います.

于 2013-07-01T15:27:58.830 に答える
0

必要な最後の行が単に「}」であると想定できる場合、次のようになります。

 /657px\)[\n\r\w\s]*\{[\n\r\w\W]*[\n\r]\}/

テスト ケースで以下のフィルターを実行するために、phantomjs を使用しました。

var fs = require('fs'),
input = fs.open('/dev/stdin', 'r');
var stuff = input.read();
var somestuff = stuff.match(/657px\)[\n\r\w\s]*\{[\w\W]*[\n\r]\}/);
console.log(somestuff);
于 2012-12-11T20:19:37.697 に答える