8

我有一个我用 node.js 编写的海峡前向聚合器/最小化器/缓存器。它现在工作得很好。

但是,我想知道是否有任何方法可以改善我的最小化正则表达式调用。一些注释并没有完全从 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;
}
4

1 回答 1

12
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 */
于 2010-12-09T21:14:16.957 回答