私は現在ポスト・コミット・フックとして縮小タスクを進めています。私は現在のバージョンのyui-compressorを使用してCSSを縮小しています。css minificationを修正するためのsed正規表現
yui-compressorの現在のバージョンに関する悪い点: 正しく機能するには空白を必要とする特定のCSS3ルールが壊れます。 (calc(10px + 10px))
問題を修正するために、圧縮後にcalc(...)をすべて置き換える正規表現を書きました。
私の解決策は、これまでのところ、次の正規表現です:置き換え/calc\((.*?)([\/\+\-\*])(.*?)\)/g
:calc(\1 \2 \3)
私は正規表現を検証するために2つのオンラインツールを使用し:
をマッチ
これはPHPでも動作します。しかし、すぐに私が使用している「sedの」のみの行ごとの最後の出現が交換されている:
圧縮CSS:
.test{width:calc(1px+1px)}.test2{left:calc(4%+140px)}.test3{width:calc(1px+1px)}
.test{width:calc(1px-1px)}.test2{left:calc(4%-140px)}.test3{width:calc(1px-1px)}
.test{width:calc(1px*1px)}.test2{left:calc(4%*140px)}.test3{width:calc(1px*1px)}
.test{width:calc(1px/1px)}.test2{left:calc(4%/140px)}.test3{width:calc(1px/1px)}
CSSを(前の正規表現に置き換え)は、正規表現の後に:(と正しい結果)
sed -r "s/calc\((.*?)([\/\+\-\*])(.*?)\)/calc(\1 \2 \3)/g" style.css
:(ファイルから同じルールをロード) - Debianの8のsed
.test{width:calc(1px + 1px)}.test2{left:calc(4% + 140px)}.test3{width:calc(1px + 1px)}
.test{width:calc(1px - 1px)}.test2{left:calc(4% - 140px)}.test3{width:calc(1px - 1px)}
.test{width:calc(1px * 1px)}.test2{left:calc(4% * 140px)}.test3{width:calc(1px * 1px)}
.test{width:calc(1px/1px)}.test2{left:calc(4%/140px)}.test3{width:calc(1px/1px)}
次のように出力されます
.test{width:calc(1px+1px)}.test2{left:calc(4%+140px)}.test3{width:calc(1px + 1px)}
.test{width:calc(1px-1px)}.test2{left:calc(4%-140px)}.test3{width:calc(1px-1px)}
.test{width:calc(1px*1px)}.test2{left:calc(4%*140px)}.test3{width:calc(1px * 1px)}
.test{width:calc(1px/1px)}.test2{left:calc(4%/140px)}.test3{width:calc(1px/1px)}
SEDで動作するようには思えません。誰もが一体何が起こっている手がかりを持っていますか?
ありがとうございます!
チャームのように機能します。どうもありがとう。私はsedが "原始的"であることに気づいていませんでした。 –
ようこそ。実際、 'sed'はsubstitute(' s'コマンド)よりもはるかに多くを行うことができます。これには分岐とループの構造があります。非常に強力な、事実として。 :)残念ながら、PCREはサポートされていませんが、必要があればPerlを試してみてください。 – randomir