Rolf B: regex Kommentare finden

Beitrag lesen

Hallo Henry,

Kann ich nicht, ist nur im Moment leichter verständlich für mich.

Gut. Wenn das dein Hauptgrund ist, dann steh auch dazu und erkläre andere Lösungen nicht als technisch unzureichend.

Wenn ich Schwächen deiner Regexe suche... hm. Kontextwechsel ist das wesentliche Problem. Ohne was verändert zu haben:

  • der CSS Comment Finder findet einen Kommentar in einem <script> Block. Er dürfte aber nur welche in einem style-Block finden.
  • der JS Comment Finder findet den multiline-Kommentar nicht. /* ... */ ist ein valider JS Kommentar

Okay, das ist Klugscheißerei. Du suchst nach /* */ Kommentaren, egal wo. Aber Du weißt nicht, ob Du einen CSS oder JS Kommentar gefunden hast. Ist das unwichtig für Dich?

  • Wieso suchst Du nur nach // Kommentaren die ein # enthalten, und dann auch nur den Text hinter dem #? Ein einzeiliger Javascript-Kommentar benötigt kein #

Mit ein paar kleinen, boshaften Änderungen:

  • der HTML Comment Finder findet einen Kommentar in der Scriptzeile
    document.write("<!-- das ist ein Test -->");
    Das darf er nicht.

In folgenden HTML Fragment werden zwei HTML Kommentare gefunden. Da ist aber nur einer.

<img src="#" alt="<!--">
Das ist ein Test!
<!-- Ende der Testsektion -->

Das ist das, was ich mit Kontextproblemen meinte.

In folgendem HTML Fragment wird ein Singleline Kommentar gefunden. Da ist aber keiner. Ebenfalls ein Kontextproblem.

<!-- // #### Wichtig ##### //
  -- Dieser Kommentar darf nicht entfernt werden
  -->

Hinzu kommt ein Regex-Fehler. Ausgegeben wird der Kommentar als # //. Die erwartete Ausgabe wäre wohl #### Wichtig ####. Grund: Das Matching von .* zu Beginn ist greedy. Es muss aber non-greedy sein (also .?). Statt .?. könntest Du auch .+? verwenden.

Ich wollte Dich auch noch mit der CSS Eigenschaft grid-area ärgern, weil deren Syntax bis zu drei Schrägstriche enthalten darf. Aber dazwischen muss immer etwas kommen, die Zeichenfolge "//" darin ist nicht syntaktisch zulässig. Das ist es im CSS wohl nirgends (außer in einem String). Glück gehabt 😜

Dann habe ich einen Test mit bösem JavaScript gemacht.

if (a <!--q) { ... }

Aber weil Browser aus historischen Gründen den Rest der Zeile hinter <!-- ignorieren, ist das kein Code, der in der freien Wildbahn vorkommen kann. Glück gehabt 😉

Rolf

--
sumpsi - posui - obstruxi