Question

J'ai un détroit avant aggrégateur / Minimizer / J'ai écrit cacher dans Node.js. Il fonctionne très bien maintenant.

Je me demande s'il y a un moyen d'améliorer mes réduisant au minimum les appels regex. Certains commentaires ne sont pas rayés de la CSS tout à fait, et je remarque quelques autres hoquets ici et là.

En outre, compte tenu de mes capacités avec regex, je pourrais être en mesure de faire la même chose dans la moitié des appels. :)

Toutes les suggestions seront grandement appréciés.

Merci.

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;
}
Était-ce utile?

La solution

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

devrait être un peu plus claire et évite la répétition. Après la première remplacer, il n'y aura des espaces à gauche; après la deuxième remplacer, seuls des espaces simples. Cela rend ce qui suit remplace plus facile.

Pour expliquer le commentaire d'enlèvement regex (ici comme regex pur bavard sans délimiteurs):

/\*       # 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 */
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top