2010-12-09 50 views
6

我有一個strait轉發聚合器/最小化器/ cacher我寫在node.js.現在它工作得很好。正則表達式最小化CSS

但我想知道是否有任何方法來改善我的最小化正則表達式調用。有些評論不是完全從CSS中分離出來的,我注意到其他幾個打嗝。

此外,考慮到我與正則表達式的能力,我可能能夠在一半的呼叫中做同樣的事情。 :)

任何建議將不勝感激。

謝謝。

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

回答

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

應該更清楚一點,避免重複。第一次更換後,只剩下空間;第二次更換後,只有單個空格。這使得以下替換更容易。

爲了解釋評論移除正則表達式(在這裏顯示爲一個純粹的正則表達式冗長無定界符):

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

非常感謝您! – Spot 2010-12-09 21:16:11