CSSを最小限にするために正規表現
-
25-09-2019 - |
質問
私は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;
}
解決
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;
}
は少し明確にし、ことを回避する反復する必要があります。最初に交換した後は、スペースのみが残されます。秒後に、一つだけのスペースを交換してください。これは、次のように置き換えが容易になります。
(区切り文字なしの純粋な冗長な正規表現としてここに示す)コメント除去正規表現を説明するために:
/\* # 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 */
所属していません StackOverflow