2010-12-09 12 views
6

Ich habe eine Straße vorwärts Aggregator/Minimierer/cacher Ich habe geschrieben in node.js. Es funktioniert jetzt ziemlich gut.RegEx zu minimieren CSS

Ich frage mich jedoch, ob es einen Weg gibt, meine minimierten Regex-Aufrufe zu verbessern. Einige Kommentare werden nicht vollständig vom CSS gestreift, und ich bemerke hier und da noch ein paar andere Schluckauf.

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

Alle Vorschläge werden 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; 
} 

Antwort

8
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 Austausch sind nur noch Plätze frei. nach dem zweiten ersetzen, nur einzelne Leerzeichen. Dies erleichtert das folgende Ersetzen.

Um das Kommentar zum Entfernen von regex (hier als reiner ausführlichen regex ohne Trennzeichen) zu erklären:

/\*  # 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 */ 
+0

Thank you very much! – Spot

+0

Danke, das hat es ziemlich verbessert. Einige Kommentare werden jedoch immer noch nicht analysiert. Eine Paste von einem ist/* Interaction Cues ---------------------------------- */Gedanken? – Spot

+0

Eigentlich mit Kontext: – Spot

Verwandte Themen