Pregunta

Tengo un delantero estrecho agregador / minimizador / cacher que he escrito en node.js. Funciona bastante bien ahora.

Sin embargo, me pregunto si hay alguna forma de mejorar mis llamadas expresiones regulares minimizan. Algunos comentarios no son a rayas de la CSS en su totalidad, y noto algunos otros contratiempos aquí y allá.

Además, teniendo en cuenta mis habilidades con las expresiones regulares, que podría ser capaz de hacer lo mismo en la mitad de las llamadas. :)

Cualquier sugerencia será muy apreciada.

Gracias.

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

Solución

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

debería ser un poco más claro y evita la repetición. Después de la primera sustituir, sólo habrá espacios dejados; después de la segunda sustitución, sólo espacios individuales. Esto hace que los siguiente sustituye más fácil.

Para explicar la expresión regular comentario de eliminación (que se muestra aquí como una expresión regular detallado puro sin 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top