8

node.jsで記述したストレートフォワードアグリゲーター/ミニマイザー/キャッシャーがあります。今ではかなりうまく機能しています。

ただし、正規表現の呼び出しを最小限に抑える方法を改善する方法があるかどうか疑問に思っています。一部のコメントはCSSから完全に削除されておらず、他にもいくつかの問題があることに気づきました。

また、正規表現の能力を考慮すると、半分の呼び出しで同じことができる可能性があります。:)

任意の提案をいただければ幸いです。

ありがとう。

function minimizeData( _content ) {
    var content = _content;
    content = content.replace( /(\/\*.*\*\/)|(\n|\r)+|\t*/g, '' );
    content = content.replace( /\s{2,}/g, ' ' );
    content = content.replace( /(\s)*:(\s)*/g, ':' );
    content = content.replace( /(\s)+\./g, ' .' );
    content = content.replace( /(\s|\n|\r)*\{(\s|\n|\r)*/g, '{' );
    content = content.replace( /(\s|\n|\r)*\}(\s|\n|\r)*/g, '}' );
    content = content.replace( /;(\s)+/g, ';' );
    content = content.replace( /,(\s)+/g, ',' );
    content = content.replace( /(\s)+!/g, '!' );
    return content;
}
4

1 に答える 1

12
function minimizeData( _content ) {
    var content = _content;
    content = content.replace( /\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g, '' );
    // now all comments, newlines and tabs have been removed
    content = content.replace( / {2,}/g, ' ' );
    // now there are no more than single adjacent spaces left
    // now unnecessary: content = content.replace( /(\s)+\./g, ' .' );
    content = content.replace( / ([{:}]) /g, '$1' );
    content = content.replace( /([;,]) /g, '$1' );
    content = content.replace( / !/g, '!' );
    return content;
}

少し明確にする必要があり、繰り返しを避けます。最初の交換後は、スペースのみが残ります。2回目の交換後は、単一のスペースのみ。これにより、次の置換が簡単になります。

コメントを削除する正規表現(ここでは区切り文字のない純粋な冗長正規表現として示されています)を説明するには:

/\*       # Match /*
(?:       # Match (any number of times)...
 (?!\*/)  # ... as long as we're not right before a */:
 [\s\S]   # any character (whitespace or non-whitespace).
)*        # (End of repeated non-capturing group)
\*/       # Match */
于 2010-12-09T21:14:16.957 に答える