Auskommentierten Quellcode heraus filtern

DataFox

Erfahrenes Mitglied
Hi Leute

ich lese mit PHP einen Quellcode einer JavaScript-Datei aus und möchte dort alles was auskommentiert ist heraus filtern. Das habe ich so versucht:

Code:
function strip_comments($s) {
	//überflüssige leerzeichen raus
	$s = preg_replace("/ +/", '', $s);
	
    $comment1 = '/\*[^*]*\*+(?:[^/*][^*]*\*+)*/';
    $comment2 = '//[^\n]*';
    $comment3 = '\#[^\n]*';

    $single = "'[^'\\]*(?:\.[^'\\]*)*'";
    $double = '"[^"\\]*(?:\.[^"\\]*)*"';
    $other = '[^"\'/\#<]';

    $eot = '<<<\s?(\S+)\b.*^\2';

    $r = preg_replace ("#($other+ |
                  $single$other* |
                  $double$other* |
                  $eot$other*)|
                  $comment1|
                  $comment2|
                  $comment3
                #msx" ,'', $s);

    return $r;
}

es kommt aber nur murks dabei herum. In JavaScript kann man so auskommentieren:

Code:
alert(123); //kommentar...

/*
das hier ist schnee von gestern

alert(123);

und das auch...
*/

hat jemand eine Idee wie man da ran gehen muss?

Gruß
Laura
 
danke! Das geht!

Kannste vielleicht noch kurz was dazu sagen wie die RegExp funktioniert, damit man das nachvollziehen kann? wäre klasse!

Gruß
Laura
 
Erst einmal ist es wichtig, die einzeiligen Kommentare vor den mehrzeiligen zu entfernen. Denn Folgendes gilt:
PHP:
//* einzeiliger Kommentar
#/* ebenfalls einzeilig
echo 'Hallo Welt!';
/*
	mehrzeiliger Kommentar
*/
Ansonsten besteht der reguläre Ausdruck aus zwei Teilausdrücken, nämlich den für einzeilige Kommentare
Code:
(?://|#)[^\n\r]*
Und der für mehrzeilige Kommentare:
Code:
/\*.*?\*/
 
Zurück