2010-12-10 105 views
2

为了降低http请求,我将所有javascriupt合并为一个整齐的文件!我坚持删除评论/* comments */// comments。 我的水平远远低于缩小或解析的东西。我知道如何制作通心粉串。什么比这更复杂,你会不会在我的电脑或厨房发现,SO:REGEX:如何使用PHP代码从javascripts中删除评论

问题

同时它组合成一个文件,我想删除所有的意见。
这是什么正确的正则表达式?

<?php 
header('Content-type: text/javascript');  
$offset = 60 * 60 * 24; // Cache for a day 
header ('Cache-Control: max-age=' . $offset . ', must-revalidate'); 
header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT'); 

ob_start("compress"); 
function compress($buffer) { 

# NOT SURE, not all new lines are removed?? 
# remove tabs, spaces, newlines, etc. 
$buffer = str_replace(array("\r\n", "\r", "\t", ' ', ' '), '', $buffer); 

# WORKS !!! 
# remove comments/XXXXXXX 
$buffer = preg_replace('(// .+)', '', $buffer); 

######################################################################## 
# !! STUCK HERE !! OUTPUT FILE LOOKS OK BUT WEBSITE DOESNT LOAD OK IF THIS IS ON 
# remove comments/* XXX (enters etc) XXXX */
# $buffer = preg_replace('#/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*/#s', '', $buffer); 
########################################################################   

return $buffer; 
} 

include('../file1.js'); 
include('../file2.js'); 
ob_end_flush(); 
?> 

这将是巨大的,如果它会赶上并删除以下:

/* XXXX */ 

/* 
    XXXX 
    XXXX 
*/ 

这就是所有!不能得到什么的正则表达式我有这个令人难以置信的工具,在这里我找到了正确的比赛甚至用它来nomatter工作:

RegExp: /\/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\//gs 
pattern: \/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\/ 
flags: gs 

http://gskinner.com/RegExr/

回答

7

使用正则表达式是不删除的Javascript的最有效的方法注释。你需要一个字符串解析器和缩小器。见http://razorsharpcode.blogspot.com/2010/02/lightweight-javascript-and-css.html

如果坚持正则表达式模式,想想你将如何分析包含在所有没有使用Javascript评论这个简单的代码:

var regex=/(ftp|https?):\/\//; alert('hello, world'); return regex; 

通知alert()之前的双斜线。一个使用正则表达式的愚蠢分析器会将有效的Javascript代码视为注释!

+1

我第二个这个建议; @Sam:如果你想优化你的反应,你应该考虑使用缩小词代替自定义评论删除者。 Google Closure编译器,YUI压缩器或[Uglify JS](https://github.com/mishoo/UglifyJS)应该是您的首选工具。 – 2010-12-10 07:31:46

+0

谢谢大家,但看起来吓人的OMG难!我的主要目标是减少HTTp请求。与此同时,我想为什么不减少评论。这对我来说真的是OKA了。我认为现在不是最完美/最快的,但我明白,并可以增长与 – Sam 2010-12-10 08:40:11

-1

我打了一个场景,我通过xhr在网络上加载javascript代码,并且需要清理代码以进行评估。我使用此代码:

var cleanCode = function cleanCode(input) { 
    // Remove special characters: 
    return input.replace(/\/\/[^"'].*?\n/g, '') /* //comments, but ignore a "//" if there is a quote after it */ 
       .replace(/\n/g, '')    /* Leftover newlines */ 
       .replace(/\r/g, '');   /* Carriage returns */ 
}; 

我测试用这个和唯一的问题我很喜欢评论:

//'key': 'value' 

所以我不得不代码更改为内注释:

/*'key': 'value'*/ //LEAVE as inline comment, please 

此代码没有得到改变:

url += '//' + ... 

随意编辑/建议编辑,使其更具可读性。

-1

模式的删除注释在JS

$pattern = '/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/'; 

模式在CSS

$pattern = '!/\*[^*]*\*+([^/][^*]*\*+)*/!'; 

$str = preg_replace($pattern, '', $str); 

我希望上面应该帮助别人删除评论..

1

我想和大家分享一个正则表达式(PHP)的代码 我写了自己这也被在 YIREO sriptmerge插件使用的Joomla标记为简单的代码片段.. 要压缩JavaScript代码,并删除所有评论从中。 它也适用于mootools它是快速的 (与其他PHP解决方案相比),并不会损坏它自己的JavaScript,它可以解决很多注释删除问题。

//--------------------------------------------------------------------------------------------------------- 
//Just started with it! 
//Prototype Still working at it when ever I got time by patient please? Tested on 800.000 lines of code! 
// Finished it 800.000 lines remove javascript comments without error....16-01-2016 
// Its not bullentproof but chances are its gonna work for you... 
//----------------------------------------------------------------//-------- //------------------------------------------------------------------------------ 
//-------------------------------------------------------------------------- 
//These are 112 lines off code that work together also works with mootools and Joomla and drupal and other cms websites. 
//Tested it on 800.000 lines of code and comments. works fine. 
//This one selects multiple parenthetical like with comments between colons (abc(/*nn*/('/*xvx*/'))"// testing line") and protect them. 
//16-01-2016..! This is the code with the comments in it.!!!!  
//----------------------------------------------------------------//----------------------------------------- 
$buffer = preg_replace("/(\*\/\s*)\/\/(?!(\*\/|[^\r\n]*?[\\\\n\\\\r]+\s*\"\s*\+|[^\r\n]*?[\\\\n\\\\r]+\s*\'\s*\+))[^\n\r\;]*?[^\;]\s*[\n\r]/", "$1\n", $buffer); 
do {$buffer = preg_replace("/(http(s)?\:)([^\r\n]*?)(\/\/)/", "$1$3qDdXX", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(^^\s*\/)(\/).*/", "\n", $buffer, 1, $count);} while ($count); 
$buffer = preg_replace("/([\r\n]+?\s*|\,\s*|\;\s*|\|\s*|\)\s*|\+\s*|\&\s*|\{\s*|\}\s*|\]\s*|\[\s*|\+\s*|\'\s*|\"\s*|\:\s*|-\s*)((\/)(\/)+)([^\r\n\'\"]*?[nte]'[a-z])*?(?!([^\r\n]*?)([\'\"]|[\\\\]|\*\/|[=]+\s*\";|[=]+\s*\';)).*/", "$1\n", $buffer); 
$buffer = preg_replace("/(^^\s*\/\*)(?!([\'\"]))[\s\S]*?(\*\/)/", "\n \n", $buffer);  
$buffer = preg_replace("/(\|\|\s*|=\s*|[\n\r]|\;\s*|\,\s*|\{\s*|\}\s*|\+\s*|\?\s*)((?!([\'\"]))\/\*)(?!(\*\/))[\s\S]*?(\*\/)/", "$1\n", $buffer); 
$buffer = preg_replace("/(\;\s*|\,\s*|\{\s*|\}\s*|\+\s*|\?\s*|[\n\r]\s*)((?!([\'\"]))\/\*)(?!(\*\/))[\s\S]*?(\*\/)/", "$1\n", $buffer); 
//Remove:) /* non-empty*//*xxx*/) 
do {$buffer = preg_replace('/([^\/\"\'\*a-zA-Z0-9\>])\/\*(?!(\*\/))[^\n\[email protected]]*?\*\/(?=([\/\"\'\\\\\*a-zA-Z0-9\>\s=\)\(\,:;\.\}\{\|\]\[]))/', "$1", $buffer, 1, $count);} while ($count); 
$buffer = preg_replace("/([\;\n\r]\s*)\/\/.*/", "$1\n", $buffer); 
$buffer = preg_replace("/(\/\s\/)([g][\W])/", "ZUQQ$2", $buffer); 
$buffer = preg_replace("/\\\\n/", "AQerT", $buffer); 
$buffer = preg_replace("/\\\\r/", "BQerT", $buffer);  
////--------------------------------------------------------------------------------------------------------- 
// Remove all extra new lines after [ and \ 
$buffer = preg_replace("/([^\*])(\*|[\r\n]|\'|\"|\,|\+|\{|;|\(|\)|\[|\]|\{|\}|\?|[^p|s]:|\&|\%|[^\\\\][a-m-o-u-s-zA-Z]|\||-|=|[0-9])(\s*)(?!([^=\\\\\&\/\"\'\^\*:]))(\/)(\/)+(?!([\r\n\*\+\"]*?([^\r\n]*?\*\/|[^\r\n]*?\"\s*\+|([^\r\n]*?=\";))))([^\n\r]*)([^;\"\'\{\(\}\,]\s*[\\\\\[])(?=([\r\n]+))/", "$1$2$3", $buffer); 

// /* followed by (not new line but) ... */ ... /* ... till */ 
$buffer = preg_replace("/((([\r\n]\s*)(\/\*[^\r\n]*?\*\/(?!([^\n\r]*?\"\s*\+)))([^\n\r]*?\/\*[^\n\r]*?\*\/(?!([^\n\r]*?\"\s*\+))[^\n\r]*?\/\*[^\n\r]*?\*\/(?!([^\n\r]*?\"\s*\+)))+)+(?!([\*]))(?=([^\n\r\/]*?\/\/\/)))/", "$3", $buffer); 
// (slash slash) remove everything behinde it not if its followed by */ and /n/r or " + and /n/r 
$buffer = preg_replace("/([\r\n]+?\s*)((\/)(\/)+)(?!([^\r\n]*?)([\\\\]|\*\/|[=]+\s*\";|[=]+\s*\';)).*/", "$1\n", $buffer); 
// slash slash star between collons protect like: ' //* ' by TDdXX 
$buffer = preg_replace("/(\'\s*)(\/\/\*)([^\r\n\*]*?(?!(\*\/))(\'))/", "$1TDdXX$3", $buffer); 
// slash slash star between collons protect like: " //* " by TDdXX 
$buffer = preg_replace("/(\"\s*)(\/\/\*)([^\r\n\*]*?(?!(\*\/))(\"))/", "$1TDdXX$3", $buffer); 
// slash slash star between collons protect like: ' //* ' by TDdXX 
$buffer = preg_replace("/(\'\s*)(\/\*)([^\r\n\*]*?(?!(\*\/))(\'))/", "$1pDdYX$3", $buffer); 
// slash slash star between collons protect like: " //* " by TDdXX 
$buffer = preg_replace("/(\"\s*)(\/\*)([^\r\n\*]*?(?!(\*\/))(\"))/", "$1pDdYX$3", $buffer); 
// in regex star slash protect by: ODdPK 
$buffer = preg_replace("/(\,\s*)(\*\/\*)(\s*[\}\"\'\;\)])/", "$1RDdPK$3", $buffer); // , */* ' 
$buffer = preg_replace('/(\n|\r|\+|\&|\=|\|\||\(|[^\)]\:[^\=\,\/\$\\\\\<]|\(|return(?!(\/[a-zA-Z]+))|\!|\,)(?!(\s*\/\/|\n))(\s*\/)([^\]\)\}\*\;\,gi\.]\s*)([^\/\n]*?)(\*\/)/', '$1$4$5$6ODdPK', $buffer); 
//// (slash r) (slash n) protect if followed by " + and new line 
$buffer = preg_replace("/[\/][\/]+(AQerTBQerT)(\s*[\"]\s*[\+])/", "WQerT", $buffer); 
$buffer = preg_replace("/[\/][\/]+(\*\/AQerTBQerT)(\s*[\"]\s*[\+])/", "YQerT", $buffer); 
// Html Text protection! 
$buffer = preg_replace("/([\r\n]\s*\/\/)[^\r\n]*?\/\*(?=(\/))[^\r\n]*?([\r\n])/", "$1 */$3", $buffer); 
$buffer = preg_replace("/([\)]|[^\/|\\\\|\"])(\/\*)(?=([^\r\n]*?[\\\\][rn]([\\\\][nr])?\s*\"\s*\+\s*(\n|\r)?\s*\"))/", "$1pDdYX", $buffer); 
$buffer = preg_replace('/([\"]\s*[\,\+][\r\n]\s*[\"])(\s*\/\/)((\/\/)|(\/))*/', '$1qDdXX', $buffer); 
$buffer = preg_replace('/([\"]\s*[\,\+][\r\n]\s*[\"](qDdXX))[\\\\]*(\s*\/\/)*((\/\/)|(\/))*/', '$1', $buffer); 
// started by new line slash slash remove all not followed by */ and new line! 
$buffer = preg_replace("/([\r\n]\s*)(?=([^\r\n\*\,\:\;a-zA-Z\"]*?))(\/)+(\/)[^\r\n\/][^\r\n\*\,]*?[\*]+(?!([^\r\n]*?(([^\r\n]*?\/|\"\s*\)\s*\;|\"\s*\;|\"\s*\,|\'\s*\)\s*\;|\'\s*\;|\'\s*\,))))[^\r\n]*(?!([\/\r\n]))[^\r\n]*/", "$1", $buffer); 
// removes all *.../ achter // leaves the (// /* staan en */) 1 off 2 
$buffer = preg_replace("/([\r\n](\/)*[^:\;\,\.\+])(\/\/[^\r\n]*?)(\*)?([^\r\n]+?)(\*)+([^\r\n\*\/])+?(\/[^\*])(?!([^\r\n]*?((\"\s*\)\s*\;|\"\s*\;|\"\s*\,|\'\s*\)\s*\;|\'\s*\;|\'\s*\,))))/", "$1$3$7$8", $buffer); 
// removes all /* after // leaves the (// */ staan) 2 off 2 
do {$buffer = preg_replace("/([\r\n])((\/)*[^:\;\,\.\+])(\/\/[^\r\n]*?)(\*)?([^\r\n]+?)(\/|\*)([^\r\n]*?)(\*)[\r\n]/", "$1", $buffer, 1, $count);} while ($count); 
////--------------------------------------------------------------------------------------------------------- 
// removes all (/* and */) combinations after // and everything behinde it! but leaves ///* */ or example. ///*//*/ one times. 
$buffer = preg_replace("/(((([\r\n](?=([^:;,\.\+])))(\/)+(\/))(\*))([^\r\n]*?)(\/\*)*([^\r\n])*?(\*\/)(?!([^\r\n]*?((\"\s*\)\s*\;|\"\s*\;|\"\s*\,|\'\s*\)\s*\;|\'\s*\;|\'\s*\,))))(((?=([^:\;\,\.\+])))(\/)*([^\r\n]*?)(\*|\/)?([^\r\n]*?)(\/\*)([^\r\n])*?(\*\/)(?!([^\r\n]*?((\"\s*\)\s*\;|\"\s*\;|\"\s*\,|\'\s*\)\s*\;|\'\s*\;|\'\s*\,)))))*)+[^\r\n]*/", "$2$7$9$10$11$12", $buffer); 
// removes /* ... followed by */ repeat even pairs till new line! 
$buffer = preg_replace("/(\/\*[\r\n]\s*)(?!([^\/<>;:%~`#@&-_=,\.\$\^\{\[\(\|\)\*\+\?\'\"\a-zA-Z0-9]))(((\/\*)[^\r\n]*?(\*\/)?[^\r\n]*?(\/\*)[^\r\n]*?(\*\/))*((\/\*)[^\r\n]*?(\*\/)))+(?!([^\r\n]*?(\*\/|\/\*)))[^\r\n]*?[\r\n]/", "\n", $buffer); 
////--------------------------------------------------------------------------------------------------------- 
// (Mark) Regex Find all " Mark with = AwTc and CwRc // special cahacers are: . \ + * ?^$ [ ] () { } < > = ! | : " ' 
$buffer = preg_replace("/(?!([\r\n]))([^a-zA-Z0-9]\+|\?|&|\=|\|\||\!|\(|,|return(?!(\/[a-zA-Z]+))|[^\)]\:)(?!(\s*\/\/|\n|\/\*[^\r\n\*]*?\*\/))(\s*\/([\*\^]?))(?!([\r\n\*\/]|[\*]))(?!(\<\!\-\-))(([^\^\]\)\}\*;,g&\.\"\']?\s*)(?=([\]\)\}\*;,g&\.\/\"\']))?)(([^\r\n]*?)(([\w\W])([\*]?\/\s*)(\})|([^\\\\])([\*]?\/\s*)(\))|([\w\W])([\*]?\/\s*)([i][g]?[\W])|([\w\W])([\*]?\/\s*)([g][i]?[\W])|([\w\W])([\*]?\/\s*)(?=(\,))|([^\\\\]|[\/])([\*]?\/\s*)(;)|([\w\W])([\*]?\/\:\s)(?!([@\]\[\)\(\}\{\.,#%\+-\=`~\*&\^;\:\'\"]))|([^\\\\])([\*]?\/\s*)(\.[^\/])|([^\\\\])([\*]?\/\s*)([\r\n]\s*[;\.,\)\}\]]\s*[^\/]|[\r\n]\s*([i][g]?[\W])|[\r\n]\s*([g][i]?[\W])))|([^\\\\])([\*]?\/\s*)([;\.,\)\}\]]\s*[^\/]|([i][g]?[\W])|([g][i]?[\W])))/", "$2$3$5AwTc$7$8$10$13$15$18$21$24$27$30$33$36$39$44CwRc$16$17$19$20$22$23$25$26$28$31$32$34$35$37$38$40$41$45$46", $buffer); 


// Remove all extra new lines after [ and \ 
$buffer = preg_replace("/([^;\"\'\{\(\}\,\/]\s*[^\/][\\\\\[]\s?)\s*([\r\n]+)/", "$1", $buffer); 
$buffer = preg_replace("/([\|\[])\s*([\|\]])/", "$1$2", $buffer); 
// (star slash) or (slash star) 1 sentence! Protect! With pDdYX and ODdPK 
do {$buffer = preg_replace('/(AwTc)([^\r\nC]*?)(\/\*)(?=([^\r\n]*?CwRc))/', '$1$2pDdYX', $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace('/(AwTc)([^\r\nC]*?)(\*\/)(?=([^\r\n]*?CwRc))/', '$1$2ODdPK', $buffer, 1, $count);} while ($count); 
// (slash slash) 1 sentence! Protect with: qDdXX 
do {$buffer = preg_replace('/(AwTc)([^\r\nC]*?)(\/\/)(?=([^\r\n]*?CwRc))/', '$1$2qDdXX', $buffer, 1, $count);} while ($count); 

//--------------------------------------------------------------------------------------------------------- 
// DEZE WERKT !! multiple parentheticals counting for even ones! 
$buffer = preg_replace("/([^\(\/\"\']\s*)(?!\(\s*function)((\()(?=([^\n\r\)]*?[\'\"]))(?!([^\r\n]*?\"\s*\<[^\r\n]*?\>\s*\"|[^\r\n]*?\"\s*\\\\\s*\"|[^\r\n]*?\"\s*\[[^\r\n]*?\]\s*\"))((?>[^()]+)|(?2))*?\))(?!(\s*\"\s*\;|\s*\'\s*\;|\s*\/|\s*\)|\s*\"|[^\n\r]*?\"\s*\+\s*(\n|\r)?\s*\"))/", "$1 /*Yu*/ $2 /*Zu*/ ", $buffer); 

// this one is SINGLE parentheticals pair. 
//  $buffer = preg_replace("/([^\(\/\"\']\s*)((\()(?=([^\n\r\)]*?[\'\"]))(?!(function|\)|[^\r\n]*?\"\s*\+[^\r\n]*?\+\s*\"|[^\r\n]*?\"\s*\<[^\r\n]*?\>\s*\"|[^\r\n]*?\"\s*\\\\\s*\"|[^\r\n]*?\"\s*\[[^\r\n]*?\]\s*\"))([^()]*?\)))(?!(\s*\"\s*\;|\s*\'\s*\;|\s*\/|\s*\)|\s*\"|[^\n\r]*?\"\s*\+\s*(\n|\r)?\s*\"))/", "$1 /*Yu*/ $2 /*Zu*/ ", $buffer); 

// (slash slash) 1 sentence! Protect with: qDdXX 
do {$buffer = preg_replace('/(\/\*Yu\*\/)([^\r\n]*?)(\/)(\/)(?=([^\r\n]*?\/\*Zu\*\/))/', '$1$2qDdXX', $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(\/\*Yu\*\/)([^\n\r\'\"]*?[\"\'])([^\n\r\)]*?)(\/\*)([^\n\r\'\"\)]*?[\"\'])([^\n\r]*?\/\*Zu\*\/)/", "$1$2$3pDdYX$5$6", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(\/\*Yu\*\/)([^\n\r\'\"]*?[\"\'])([^\n\r\)]*?)(\*\/)([^\n\r\'\"\)]*?[\"\'])([^\n\r]*?\/\*Zu\*\/)/", "$1$2$3ODdPK$5$6", $buffer, 1, $count);} while ($count); 

//--------------------------------------------------------------------------------------------------------- 
// (slash slash) 2 sentences! Protect ' and " 
do {$buffer = preg_replace("/(=|\+|\(|[a-z]|\,)(\s*)(\")([^\r\n\;\/\'\)\,\]\}\*]*?)(\/)(\/)([^\r\n\;\"\*]*?)(\")/", "$1$2$3$4qDdXX$7$8", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(=|\+|\(|[a-z]|\,)(\s*)(\')([^\r\n\;\/\'\)\,\]\}\*]*?)(\/)(\/)([^\r\n\*\;\']*?)(\')/", "$1$2$3$4qDdXX$7$8", $buffer, 1, $count);} while ($count); 
// (slash slash) 2 sentences! Protect slash slash between ' and " 
do {$buffer = preg_replace("/(\"[^\r\n\;]*?)(\/)(\/)([^\r\n\"\;]*?([\"]\s*(\;|\)|\,)))/", "$1qDdXX$4", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(\'[^\r\n\;]*?)(\/)(\/)([^\r\n\'\;]*?([\']\s*(\;|\)|\,)))/", "$1qDdXX$4", $buffer, 1, $count);} while ($count); 
//--------------------------------------------------------------------------------------------------------- 
// Remove all slar slash achter \n 
$buffer = preg_replace("/([\n\r])([^\n\r\*\,\"\']*?)(?=([^\*\,\:\;a-zA-Z\"]*?))(\/)(\/)+(?=([^\n\r]*?\*\/))([^\n\r]*?(\*\/)).*/", "$1$4$5 $8", $buffer); 
do {$buffer = preg_replace("/([\r\n]\s*)((\/\*(?!(\*\/)))([^\r\n]+?)(\*\/))(?!([^\n\r\/]*?(\/)(\/)+\*))/", "$1$3$6", $buffer, 1, $count);} while ($count); 
$buffer = preg_replace("/([\n\r]\/)(\/)+([^\n\r]*?)(\*\/)([^\n\r]*?(\*\/))(?!([^\n\r]*?(\*\/)|[^\n\r]*?(\/\*))).*/", "$1/ $4", $buffer); 
do {$buffer = preg_replace("/([\n\r]\s*\/\*\*\/)([^\n\r=]*?\/\*[^\n\r]*?\*\/)(?=([\n\r]|\/\/))/", "$1", $buffer, 1, $count);} while ($count); 
$buffer = preg_replace("/([\n\r]\s*\/\*\*\/)([^\n\r=]*?)(\/\/.*)/", "$1$2", $buffer); 
// Remove all slash slash achter = '...'; //...... 
do {$buffer = preg_replace("/(\=\s*)(?=([^\r\n\'\"]*?\'[^\n\r\']*?\'))([^\n\r;]*?[;]\s*)(\/\/[^\r\n][^\r\n]*)[\n\r]/", "$1$3", $buffer, 1, $count);} while ($count); 
// protect slash slash '...abc//...abc'! 
do {$buffer = preg_replace("/(\=)(\s*\')([^\r\n\'\"]*?)(\/)(\/)([^\r\n]*?[\'])/", "$1$2$3qDdXX$6", $buffer, 1, $count);} while ($count); 
//(slash star) or (star slash) : no dubble senteces here! Protect with: pDdYX and ODdPK 
do {$buffer = preg_replace("/(\"[^\r\n\;\,\"]*?)(\/)(\*)(?!([YZ]u\*\/))([^\r\n;\,\"]*?)(\")/", "$1pDdYX$5$6", $buffer, 1, $count);} while ($count); // open 
do {$buffer = preg_replace("/([^\"]\"[^\r\n\;\/\,\"]*?)(\s*)(\*)(\/)([^\r\n;\,\"=]*?)(\")/", "$1$2ODdPK$5$6", $buffer, 1, $count);} while ($count); // close 
do {$buffer = preg_replace("/(\'[^\r\n\;\,\']*?)(\/)(\*)(?!([YZ]u\*\/))([^\r\n;\,\']*?)(\')/", "$1pDdYX$5$6", $buffer, 1, $count);} while ($count); // open 
do {$buffer = preg_replace("/(\'[^\r\n\;\/\,\']*?)(\s*)(\*)(\/)([^\r\n;\,\']*?)(\')/", "$1$2ODdPK$5$6", $buffer, 1, $count);} while ($count); // close 
// protect star slash '...abc*/...abc'! 
do {$buffer = preg_replace("/(\'[^\r\n\;\,\']*?)(\*)(\/)([^\r\n;\,\']*?)(\')(?!([^\n\r\+]*?[\']))/", "$1ODdPK$4$5", $buffer, 1, $count);} while ($count); 
// protect star slash '...abc*/...abc'! 
do {$buffer = preg_replace("/(\"[^\r\n\;\,\"]*?)(\*)(\/)([^\r\n;\,\"]*?)(\")(?!([^\n\r\+]*?[\"]))/", "$1ODdPK$4$5", $buffer, 1, $count);} while ($count); 
//--------------------------------------------------------------------------------------------------------- 
//// \n protect 
do {$buffer = preg_replace("/(=\s*\"[^\n\r\"]*?)(\/\/)(?=([^\n\r]*?\"\s*;))/", "$1qDdXX", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(=\s*\"[^\n\r\"]*?)(\/\*)(?!([YZ]u\*\/))(?=([^\n\r]*?\"\s*;))/", "$1pDdYX", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(=\s*\"[^\n\r\"]*?)(\*\/)(?=([^\n\r]*?\"\s*;))/", "$1ODdPK", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(=\s*\'[^\n\r\']*?)(\/\/)(?=([^\n\r]*?\'\s*;))/", "$1qDdXX", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(=\s*\'[^\n\r\']*?)(\/\*)(?!([YZ]u\*\/))(?=([^\n\r]*?\'\s*;))/", "$1pDdYX", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(=\s*\'[^\n\r\']*?)(\*\/)(?=([^\n\r]*?\'\s*;))/", "$1ODdPK", $buffer, 1, $count);} while ($count); 
//--------------------------------------------------------------------------------------------------------- 
// (Slash Slash) alle = " // " and = ' // ' replace by! qDdXX 
do {$buffer = preg_replace("/(\=|\()(\s*\")([^\r\n\'\"]*?[\'][^\r\n\'\"]*?)(\/)(\/)([^\r\n\'\"]*?[\'])(\s*\'[^\r\n\'\"]*?)(\/\/|qDdXX)?([^\r\n\'\"]*?[\'][^\r\n\'\"]*?[\"])(?!(\'\)|\s*[\)]?\s*\+|\'))/", "$1$2$3qDdXX$6$7qDdXX$9$10", $buffer, 1, $count);} while ($count); 
do {$buffer = preg_replace("/(\=|\()(\s*\')([^\r\n\'\"]*?[\"][^\r\n\'\"]*?)(\/)(\/)([^\r\n\'\"]*?[\"])(\s*\"[^\r\n\'\"]*?)(\/\/|qDdXX)?([^\r\n\'\"]*?[\"][^\r\n\'\"]*?[\'])(?!(\'\)|\s*[\)]?\s*\+|\'))/", "$1$2$3qDdXX$6$7qDdXX$9$10", $buffer, 1, $count);} while ($count); 
//--------------------------------------------------------------------------------------------------------- 
// (slash slash) Remove all also , or + not followed by */ and newline 
$buffer = preg_replace("/([^\*])(\*|[\r\n]|[^\\\\]\'|[^\\\\]\"|\,|\+|\{|;|\(|\)|\[|\]|\{|\}|\?|[^p|s]:|\&|\%|[^\\\\][a-m-o-u-s-zA-Z]|\||-|=|[0-9])(\s*)(?!([^=\\\\\&\/\"\'\^\*:]))(\/)(\/)+(?!([\r\n\*\+\"]*?([^\r\n]*?\*\/|[^\r\n]*?\"\s*\+|([^\r\n]*?=\";)))).*/", "$1$2$3", $buffer); 
// (slash slash star slash) Remove everhing behinde it not followed by */ or new line 
$buffer = preg_replace("/(\/\/\*\/)(?!([\r\n\*\+\"]*?([^\r\n]*?\*\/|[^\r\n]*?\"\s*\+|([^\r\n]*?=\";)))).*/", "", $buffer); 
// Remove almost all star comments except colon/**/ 
$buffer = preg_replace("/(?!([^\n\r]*?[\'\"]))(\s*<!--.*-->)(?!(<\/div>))[^\n\r]*?.*/","$2$4", $buffer); 
$buffer = preg_replace("/([\n\r][^\n\r\*\,\"\']*?)(?=([^\*\,\:\;a-zA-Z\"]*?))(\/)(\/)+(?!([\r\n\*\+\"]*?([^\r\n]*?\*\/|[^\r\n]*?\"\s*\+|([^\r\n]*?=\";)))).*/", "$1", $buffer); 
$buffer = preg_replace("/(?!([^\n\r]*?[\'\"]))(\s*<!--.*-->)(?!(<\/div>))[^\n\r]*?(\*\/)?.*/","", $buffer); 
$buffer = preg_replace("/(<!--.*?-->)(?=(\s*<\/div>))/","", $buffer); 
//--------------------------------------------------------------------------------------------------------- 
// Restore all 
$buffer = preg_replace("/qDdXX/", "//", $buffer); // Restore // 
$buffer = preg_replace("/pDdYX/", "/*", $buffer); // Restore 
$buffer = preg_replace("/ODdPK/", "*/", $buffer); // Restore 
$buffer = preg_replace("/RDdPK/", "*/*", $buffer); // Restore 
$buffer = preg_replace("/TDdXX/", "//*", $buffer); // Restore */ 
$buffer = preg_replace('/WQerT/', '\\\\r\\\\n" +', $buffer); // Restore \r\n" + 
$buffer = preg_replace('/YQerT/', '//*/\\\\r\\\\n" +', $buffer); // Restore \r\n" + 
$buffer = preg_replace('/AQerT/', '\\\\n', $buffer); // Restore \n" 
$buffer = preg_replace('/BQerT/', '\\\\r', $buffer); // Restore \r" 
$buffer = preg_replace("/ZUQQ/", "/ /", $buffer); 
$buffer = preg_replace('/\s\/\*Zu\*\/\s/', '', $buffer); // Restore \n" 
$buffer = preg_replace('/\s\/\*Yu\*\/\s/', '', $buffer); // Restore \n" 
////--------------------------------------------------------------------------------------------------------- 
//// Remove all markings! 
$buffer = preg_replace('/(AwTc)/', '', $buffer); // Start most Regex! 
$buffer = preg_replace('/(CwRc)/', '', $buffer); // End Most regex! 
// all \s and [\n\r] repair like they where! 
$buffer = preg_replace("/([a-zA-Z0-9]\s?)\s*[\n\r]+(\s*[\)\,&]\s?)(\s*[\r\n]+\s*[\{])/", "$1$2$3", $buffer); 
$buffer = preg_replace("/([a-zA-Z0-9\(]\s?)\s*[\n\r]+(\s*[;\)\,&\+\-a-zA-Z0-9]\s?)(\s*[\{;a-zA-Z0-9\,&\n\r])/", "$1$2$3", $buffer); 
$buffer = preg_replace("/(\(\s?)\s*[\n\r]+(\s*function)/", "$1$2", $buffer); 
$buffer = preg_replace("/(=\s*\[[a-zA-Z0-9]\s?)\s*([\r\n]+)/", "$1", $buffer); 
//----------------------------------------------- 
$buffer = preg_replace("/([^\*\/\'\"]\s*)(\/\/\s*\*\/)/", "$1", $buffer); 
//// Remove all /**/// .... Remove expept /**/ and followed by */ till newline! 
$buffer = preg_replace("/(\/\*\*\/)(\/\/(?!([^\n\r]*?\*\/)).*)/", "$1", $buffer); 
$buffer = preg_replace("/(\;\/\*\*\/)(?!([^\n\r]*?\*\/)).*/", "", $buffer); 
$buffer = preg_replace("/(\/\/\\\\\*[^\n\r\"\'\/]*?[\n\r])/", "\r\n", $buffer); 
$buffer = preg_replace("/([\r\n]\s*)(\/\*[^\r\n]*?\*\/(?!([^\r\n]*?\"\s*\+)))/", "$1", $buffer); 
//Remove colon /**/ 
$buffer = preg_replace("/\/\*\*\/\s/", " ", $buffer); 
$buffer = preg_replace("/(\=\s*)(?=([^\r\n\'\"]*?\'[^\n\r\'\"]*?\'))([^\n\r\/]*?)(\/\/[^\r\n\"\'][^\r\n]*[\'\"])(\/\*\*\/)[\n\r]/", "$1$3$4\n", $buffer); 
$buffer = preg_replace("/(\=\s*)(?=([^\r\n\'\"]*?\"[^\n\r\'\"]*?\"))([^\n\r\/]*?)(\/\/[^\r\n\"\'][^\r\n]*[\'\"])(\/\*\*\/)[\n\r]/", "$1$3$4\n", $buffer); 
//Remove colon // 
$buffer = preg_replace("/([^\'\"ps\s]\s*)(\:[^\r\n\'\"\[\]]*?\'[^\n\r\'\"]*?\')([^\n\r\/a-zA-Z0-9]*?)(\/\/)[^\r\n\/\'][^\r\n]*/", "$1$2", $buffer); 
$buffer = preg_replace("/([^\'\"ps\s]\s*)(\:[^\r\n\'\"\[\]]*?\"[^\n\r\'\"]*?\")([^\n\r\/a-zA-Z0-9]*?)(\/\/)[^\r\n\/\"][^\r\n]*/", "$1$2", $buffer); 
$buffer = preg_replace("/(\"[^\n\r\'\"\+]*?\")([^\n\r\/a-zA-Z0-9]*?)(\/\/)(?!(\*|[^\r\n]*?[\\\\n\\\\r]+\s*\"\s*\+|[^\r\n]*?[\\\\n\\\\r]+\s*\'\s*\+))[^\r\n\/\"][^\r\n]*/", "$1$2", $buffer); 
//Remove all after ; slah slah+ 
$buffer = preg_replace("/(;\s*)\/\/(?!([^\n\r]*?\"\s*;)).*/", "$1 \n", $buffer); 
//Remove:) /* non-empty*//*xxx*/) 
$buffer = preg_replace('/([\n\r][^\n\r\"]*?)([^\/\"\'\*\>])\/\*(?!(\*\/))[^\n\r\"]*?[^@]\*\//', "$1$2", $buffer); 
//Remove // vooraf gegaan door: || | ? | , // 
$buffer = preg_replace("/(\|\||[\?]|\,)(\s*)\/\/(?!([^\n\r]*?\*\/|\"|\')).*/", "$1$2", $buffer); 
//Remove: [\n\r] after: [ \|\[\;\,\:\=\-\{\}\]\[\?\)\(] 
$buffer = preg_replace("/([\|\[\;\,\:\=\-\{\}\]\[\?\)\(])\s*[\n\r]\s*[\n\r](\s*[\n\r])+/", "$1\n", $buffer); 
////--------------------------------------------------------------------------------------------------------- 
//END Remove comments. //START Remove all whitespaces  
$buffer = preg_replace('/(--\s+\>)/', 'HwRc', $buffer); // protect space between: -- > 
//-------------------------------------------------------- 
$buffer = preg_replace('/\s+/', ' ', $buffer); 
$buffer = preg_replace('/\s*(?:(?=[=\-\+\|%&\*\)\[\]\{\};:\,\.\<\>\!\@\#\^`~]))/', '', $buffer); 
$buffer = preg_replace('/(?:(?<=[=\-\+\|%&\*\)\[\]\{\};:\,\.\<\>\?\!\@\#\^`~]))\s*/', '', $buffer); 
$buffer = preg_replace('/([^a-zA-Z0-9\s\-=+\|[email protected]#$%^&*()`~\[\]{};:\'",<.>\/?])\s+([^a-zA-Z0-9\s\-=+\|[email protected]#$%^&*()`~\[\]{};:\'",<.>\/?])/', '$1$2', $buffer); 
//------------------------------------------------------- 
$buffer = preg_replace('/(HwRc)/', '-- >', $buffer); // Repair space between: -- > 
//END Remove all whitespaces 

我只是为了好玩测试此 (var regex=/(ftp|https?):\/\//;alert('hello,world');)这 /* foo(); // some comment */这:"Python's division: 1 // 2"//"you dope"例如 和我的压缩编码那些不会破坏上面的例子! 上面的评论:( 一个愚蠢的解析器,使用正则表达式将视为有效的JavaScript代码作为注释!)所以也许你也可以用正则表达式写没有愚蠢的解析器???

我关闭粗不是一个程序员只是想 使插件工作就像我希望它.... 请随意发表评论,如果你找到一个 问题,此脚本与有效的JavaScript语句。任何种类的 评论标签结合(或不结合),它不能正确解决.. 因为我确实有一个大handycap我现在没有任何Javascript语法 所以我不知道会发生什么我只是测试它我能找到的例子!

更新后的需求不再需要测试8000.000行现在工作正常。