正则表达式来减少CSS
-
25-09-2019 - |
题
我有一个海峡向前聚合/最小化器/ cacher的我已经写在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;
}
解决方案
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 */
不隶属于 StackOverflow