2010-12-10 58 views
2

Je combine tous mes javascriupt dans un fichier soigné afin de réduire les requêtes http! Je suis bloqué en supprimant les commentaires /* comments */ et // comments. Mon niveau est de loin inférieur à la minification ou à l'analyse syntaxique. Je sais comment faire des cordes de macaronis. Quelque chose de plus complexe que cela, vous ne trouverez pas dans mon ordinateur ou la cuisine, SO:REGEX: Comment supprimer les commentaires de javascripts, en utilisant le code PHP

QUESTION

quant à lui à combiner à un fichier, je veux supprimer tous les commentaires.
Quelle est la regex correcte pour cela?

<?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(); 
?> 

Ce serait génial si elle attraperait et supprimer les éléments suivants:

/* XXXX */ 

/* 
    XXXX 
    XXXX 
*/ 

C'est tout! Cant get pour travailler nomatter ce que je regex utilise même avec cet outil incroyable, où je retrouvai le match droit d'être:

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

http://gskinner.com/RegExr/

Répondre

7

Utilisation d'expressions régulières n'est pas la façon la plus efficace de la suppression Javascript commentaires. Vous avez besoin d'un analyseur de chaînes et d'un minifieur. Voir http://razorsharpcode.blogspot.com/2010/02/lightweight-javascript-and-css.html

Si vous insistez sur les modèles regex, pensez à la façon dont vous analyser ce code simple qui ne contient pas de commentaires Javascript du tout:

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

Notez la double barre oblique avant alert(). Un parser stupide qui utilise des expressions régulières traitera le code Javascript valide comme des commentaires!

+1

Je seconde cette suggestion; @Sam: Si vous essayez d'optimiser vos réponses, vous devriez vraiment envisager d'utiliser des minifieurs à la place des suppresseurs de commentaires personnalisés. Google Closure Compiler, YUI Compressor ou [Uglify JS] (https://github.com/mishoo/UglifyJS) devraient être vos outils incontournables. –

+0

Merci les gens, mais OMG qui semble effrayant difficile! Mon objectif principal était de réduire la demande HTTp. Pendant ce temps je pensais pourquoi ne pas réduire les commentaires. C'est vraiment OKA pour moi pour le moment, pour de vrai. Je n'apprécie pas maintenant le plus parfait/le plus rapide, mais je comprends et peux grandir avec – Sam

+2

@Sam: Habituellement, je suis un défenseur majeur de regexp, mais les commentaires sont trop complexes pour supprimer javascript, certainement un travail pour un analyseur minimisant. – Orbling

-1

Je suis tombé sur un scénario où je charge du code javascript sur le réseau via xhr, et j'ai besoin de nettoyer le code pour l'évaluer. J'utilise ce code:

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

Je l'ai testé en utilisant cela et le seul hic que j'avais été un commentaire comme:

//'key': 'value' 

donc je devais changer ce code pour le commentaire en ligne:

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

Ce code ne soit pas modifié:

url += '//' + ... 

Ne hésitez pas à modifier/suggérer des modifications pour le rendre plus lisible.

+1

Cette méthode est très peu fiable, car elle repose sur l'hypothèse que '//' est toujours le début d'un commentaire. Exemples d'échec: '" Division de Python: 1 // 2 "' et '/ * foo(); // quelques commentaires */' –

+0

Oui, ce code est extrêmement fragile/non robuste/non fiable. Vous devez avoir un javascript bien formaté. Le pire des cas est lorsque vous avez un // commentaire de style commence par un «ou», comme: // "vous dope" –

-1

Motif pour commentaires remove dans JS

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

Motif pour supprimer des commentaires en CSS

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

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

J'espère que ci-dessus devrait aider quelqu'un ..

1

Je voudrais partager un regex (PHP) extrait de code je l'ai écrit pour moi-même, il est également utilisé dans le plugin sriptmerge de YIREO pour joomla marqué le code aussi simple .. Pour compresser le code javascript et de supprimer tous les commentaires à partir de cela. Il fonctionne également avec mootools Il est rapide (en comparaison avec d'autres solutions PHP) et ne pas endommager le JavaScript lui-même et il résout beaucoup de problèmes de suppression de commentaires.

//--------------------------------------------------------------------------------------------------------- 
//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 

J'ai juste pour le plaisir testé cette (var regex=/(ftp|https?):\/\//;alert('hello,world');) et ce /* foo(); // some comment */ et ceci: "Python's division: 1 // 2" et ce //"you dope" exemple et mon code de compression ceux qui ne l'endommager exemple ci-dessus! COMMENTAIRE DE HAUT: ( Un analyseur stupide qui utilise des expressions régulières traitera le code JavaScript valide comme des commentaires!) Alors peut-être que vous pouvez également écrire aucun parseurs stupides avec regex ???

Je suis hors gros pas un programmeur voulais juste faire fonctionner le plugin comme je le voulais .... S'il vous plaît ne hésitez pas à laisser un commentaire si vous trouvez un problème avec ce script avec des phrases javascript valides. Et tout type de balises combinées (ou non combinées) qu'elle ne résout pas correctement .. Parce que j'ai un gros handycap je n'ai pas de syntaxe Javascript maintenant donc je ne sais pas à quoi m'attendre Je viens de le tester sur des exemples que j'ai pu trouver!

Mise à jour ne nécessite plus de tests 8000.000 lignes fonctionnent bien maintenant.!