Und wie soll das gehen, wenn JavaScript-comments die gleiche Syntax wie HTML comments haben ? Oder irre ich mich da ? Wenn die sich unterscheiden, dann sag mir bitte wie, und ich bastel dir die Regex.
EDIT: Ist das nicht zufällig so, dass das was du geschrieben hast, kein JavaScript-Kommentar ist ? Soweit ich jetzt gelesen habe sind sie so zu schreiben
/*
kommentar
*/
Ja das ist nen HTML Kommentar.
Meinst du zufällig so ein Kontrukt?
[XML]<script type="text/javascript">
<![CDATA[
//content of your Javascript goes here
]]>
</script>[/XML]
@RySa: z.b. wenn die sachen mit //--> enden, soll die regel nicht gelten...
@EikeB: ja, das wäre eine lösung... statt den javascript innerhalb des script-tags mit <!-- ... //--> zu verwenden... dann würde meine regex-string nicht mehr zutreffen. nur: ist dieses cdata-sache mit xhtml 4 transitional kompatibel?
Ja, das ist ist XHTML standard.
Deine vorherige Lösung hingegen nicht, die würde auch ziemlich sicher von jedem modernen Browser als kommentar gewertet werden und der javascript code würde nie ausgeführt werden.
@eikeb: nein, hatte nie probleme damit dass der inhalt nicht ausgeführt wurde. weder bei firefox 5 noch bei ie9.
der abschliessende teil macht es doch aus? -> //-->
wenn ich statt //--> ein --> schreiben würde, dann wäre es doch sicher ein kommentar?
noch ein weitere frage: manche verzichten vollständig auf solche sachen bei js. was ist der unterschied? ist es korrekt, dass dann ein browser das ganze dann als text darstellen würde, falls er kein javascript unterstützt...?
noch ein weitere frage: manche verzichten vollständig auf solche sachen bei js. was ist der unterschied? ist es korrekt, dass dann ein browser das ganze dann als text darstellen würde, falls er kein javascript unterstützt...?
diese Kommentar war nur damals nötig, als JavaScript von Netscape eingeführt wurde, damit andere Browser die kein JS kennen dies nicht als Text darstellen wurde der Kommentar benötigt.
Heute ist dieser überflüssig und wird deshalb komplett weggelassen, es seiden irgendwelche Tutorials bauen wieder auf 20 Jahre altem Wissen auf
interessant, danke für den hinweis! habe das, wenn ich mich nicht täusche, vor jahren bei selfhtml gelesen. seit dem habe ich das immer verwendet...
@RySa: besten dank für das stück code - werde ich morgen testen!
in aktuellen projekt werde ich sämtliche kommentare in dieser art drinlassen, trotz ice-breaker's hinweis. in zukunft werd ich dann wohl die cdata-lösung verwenden...
Ach du, sorry, das alte Regex ist ja genau um nur Javascript zu entfernen ^^ habe es irgendwie falsch verstanden. Eine Frage habe ich nur noch hierzu. Sind / innerhalb des Kommentars erlaubt ?
auch das 2. regex funktioniert leider nicht wirklich. (habe vergessen, was dabei passiert ist...)
manchmal muss man halt den pragmatischen weg gehen, wenn eine dermassen triviale sache nach mehr als 1 woche (threaderstelldatum 13.07.2011) immer noch nicht gelöst ist:
das ist für mich auch logisch verständlich, im ggs. zu diesem regex-zeugs!
(...und wohl das letzte mal in meinem leben, wo ich FREIWILLIG versuchte regex einzusetzen - stringoperationen mit "normaler" logik sind doch viiiiiiiiiiiel einfacher und verständlicher, nicht?)
Ist auch nicht gerade einfach dein Problem schnell zu lösen, wenn du immer nur jeden zweiten Tag antwortest ich habe mein Regex an deinem Beispiel getestet und es hat funktioniert (habe es natürlich auch umgeändert zu Testzwecken). Wenn du aber genauer beschreiben könntest warum es nicht funktioniert und was immer bei rauskommt. Oder auch mehr Beispiele gegeben hättest, an denen es getestet werden kann, wäre es sicherlich leichter dein Problem zu lösen. Wenn du aber doch noch daran interessiert sein solltest es mittels Regex zu lösen, sag mir bescheid, mach ich immer wieder gern (nicht, dass ich Regex besonders mag. Man kann die aber immer wieder gebrauchen und es ist einfach eine gute Übung für mich ).
das war natürlich keine aussage bezügl. geschwindigkeit in diesem forum (will keinesfalls "fordern" - nochmals vielen dank für deine hilfestellung!), eher habe ich mich ab mir selbst und meiner organisation genervt, dass sowas einfaches nach > 1 woche noch nicht erledigt ist. :-( irgendwie habe ich die sache auch vergessen - wenn ich fragen stelle und mir geholfen wird, sollte ich selbstverständlich rechtzeitig antworten...
das 2. regex ergibt bei folgender anwendung eine exception java.lang.StackOverflowError:
die anwendung wäre doch richtig -> alles was dem kriterium entspricht, durch einen leeren string ersetzen...?
und: zusätzlich zum kommentare-entfernen kommt noch eine formatierung des source-codes. ("pretty print" während der entwicklung, kompression im produktiv-betrieb)
wenn man zuerst formatiert, und erst dann kommentare entfernt, dann ist es einfacher: der formatter sorgt nämlich dafür, dass (u.a.) kommentare KEINE returns mehr drinhaben. (hat sich soeben gezeigt) wenn man also nach dem formatieren die kommentare entfernt, muss das regex etwa keine line-breaks berücksichtigen. das macht die sache schon einfacher...
gruss, jan
p.s.: meine funktion ist buggy, hab das schnell was hingepfuscht was nur auf dem 1. blick funktioniert...
So wird das nicht gehen. Habe es eben an meinem Beispiel getestet und es funktioniert auch nicht. Außerdem verursacht bei dir das replaceAll() eine Endlosschleife. Doch mit replace wird das auch nicht funktionieren. Da musst du glaube ich mit Pattern und Matcher arbeiten. Versuche so etwas wie hier:
EDIT: Habe das alte gelöscht weil es hmm... sagen wir mal "nicht so gut" war Das Problem bei den Regex ist, dass man nicht so einfach eine Zeichenfolge negieren kann. Also habe ich 2 Möglichkeiten für dich. Das 1:
Java:
publicstaticvoidmain(String[] args){String s ="das ist ()kein Kommentar <!--ein Kommentar 7//+ß135 /nblabla --> das ist auch &%kein Kommentar <!-- ein naechstes Kommentar --> kein :) Kommentar <!-- ein Javascriptkommentar //-->";Pattern pattern =Pattern.compile("(?s)<!--.*?-->");Matcher matcher = pattern.matcher(s);while(matcher.find()){if(!matcher.group().matches("(?s)<!--.*?//-->")){
s = s.replace(matcher.group(),"");}}System.out.println(s);}
Oder das 2. wobei hier die Zeichenfolge // innerhalb des Kommentars nicht erlaubt ist:
Java:
publicstaticvoidmain(String[] args){String s ="das ist ()kein Kommentar <!--ein Kommentar/ 7+ß135 /nblabla --> das ist auch &%kein Kommentar <!-- ein naechstes Kommentar --> kein :) Kommentar <!-- ein Javascriptkommentar //-->";Pattern pattern =Pattern.compile("(?s)<!--((?!//).)*?-->");Matcher matcher = pattern.matcher(s);while(matcher.find()){
s = s.replace(matcher.group(),"");}System.out.println(s);}
Such dir was aus Wenn die Performance von großer Bedeutung ist und sowieso keine // innerhalb des Kommentars enthalten sind, dann würde ich die 2. Lösung empfehlen.
- die 1. variante hat zuerst zuviel entfernt, das problem war aber dass in einem js-block // --> statt //--> stand. (sorry, evtl. war das auch der grund, warum es bereits vorher probleme gegeben hat...?)
- mit der 2. variante war ein // --> nie ein problem, habe jetzt trotzdem alles nach //--> geändert.
ich habe mit die 2. variante ausgesucht ;-), scheint einfacher zu sein. die zeichenfolge // wird innerhalb eines "normalen" html-kommentars ohnehin nie verwendet, innerhalb von javascript hingegen schon:
</script>
<!--
function blabla()
{
// ich bin leer...
}
//-->
</script>
...aber sowas wird von deinem regex ja schön "in ruhe gelassen"!