Frage

Ich habe eine Straße nach vorne Aggregator / minimizer / Cacher ich in node.js. geschrieben habe Es funktioniert ganz gut jetzt.

Ich frage mich jedoch, ob es eine Möglichkeit ist meine Minimierung regex Anrufe zu verbessern. Einige Kommentare werden nicht von der CSS ganz gestreift, und ich merke, ein paar anderen Schluckauf hier und da.

Auch meine Fähigkeiten mit regex bedenken, könnte ich in der Lage sein, das gleiche in der Hälfte der Anrufe zu tun. :)

wird Irgendwelche Vorschläge sehr geschätzt.

Danke.

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;
}
War es hilfreich?

Lösung

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

sollte etwas klarer und vermeidet Wiederholungen sein. Nach dem ersten ersetzen, wird es nur verlassen werden, Räume; nach dem zweiten ersetzen, nur einzelne Leerzeichen. Dies macht die folgende Text ersetzt einfacher.

Kommentar zum Entfernen von Regex erklären (hier als reine ausführliche regex ohne Trennzeichen):

/\*       # 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 */
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top