Pergunta

Eu tenho um agregador/minimizador/cacher para a frente do Estreito que escrevi no Node.js. Funciona muito bem agora.

No entanto, estou me perguntando se há alguma maneira de melhorar minhas chamadas de regex minimizando. Alguns comentários não são listrados do CSS completamente, e noto alguns outros soluços aqui e ali.

Além disso, considerando minhas habilidades com a Regex, posso fazer o mesmo na metade das chamadas. :)

Quaisquer sugestões serão muito apreciadas.

Obrigado.

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;
}
Foi útil?

Solução

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;
}

deve ser um pouco mais claro e evitar a repetição. Após a primeira substituição, restará apenas espaços; Após a segunda substituição, apenas espaços únicos. Isso facilita o seguinte.

Para explicar o comentário que remove regex (mostrado aqui como um regex detalhado puro sem delimitadores):

/\*       # 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 */
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top