URL: https://www.overclockers.at/coding-stuff/regex-javascript-find-occurrence-not-in-comments_248532/page_1 - zur Vollversion wechseln!
ich suche eine möglichkeit, mittels regex in einer javascript file matches zu finden, die nicht innerhalb eines javascript zeilen- oder blockkommentars liegen. ein code snippet sähe z.b. so aus:
in diesem fall soll nur foo(3.141); gematched werden. ich habe gestern schon einige zeit recherchiert und expressions gefunden die block- und zeilenkommentare matchen können, aber noch keine möglichkeit nicht innerhalb von kommentaren zu matchen. zumindest zeilenkommentare kann ich beim matchen ignorieren mitCode: JS/* * use foo(number) to do the thing. you can also provide a second parameter * foo(number, number) to use an alternate method. */ foo(3.141); // foo(3.141, 2.718); //skip this for now
es dürfen auch mehrere regexs sein, die hintereinander ausgeführt werden.Code: JS/[\\r\\n](?!\\/).*foo\\(.*\\)/g
niemand? 
Blöde Frage, die andere Richtung ist keine Option?Zitat von wergorich habe gestern schon einige zeit recherchiert und expressions gefunden die block- und zeilenkommentare matchen können, aber noch keine möglichkeit nicht innerhalb von kommentaren zu matchen.

wäre natürlich auch möglich. ich müsste nur herausfinden wie ich ganze textblöcke aus strings löschen kann... (vielleicht eh einfach mit String.replace()?)
ich habs nicht vergessen, bin nur gerade mit anderen dingen beschäftigt, ich weis noch nicht wann das thema wieder aktuell wird.
Mein Vorschlag wäre ebenfalls, die Kommentare zuerst zu entfernen und dann erst nach deinem Pattern zu matchen. Ich hatte dafür eine Weile eine Regular Expression, aber das Parsen innerhalb von Strings zu vermeiden, ist ziemlich aufwendig. Deshalb habe das mittlerweile per simplem Line-Parsing in PHP implementiert und verwende diesen Code heute noch in meinem Framework.
In $szContent muss das Textfile rein und in dieser Variable kommt es auch wieder raus. Es werden Strings mit Single- und Double-Quote unterstützt, sowie Single- und Multiline-Kommentare.
Code: PHP$aLines = explode("\n",$szContent); if (Util::countArray($aLines) > 0) { $szRawContent = ""; $bInComment = false; foreach ($aLines as $szLine) { $szLine = trim($szLine,"\r\t "); if (!$szLine) continue; $bInString = false; $szStringChar = null; $nChars = strlen($szLine); for ($i=0;$i < $nChars;$i++) { $szLastChar = $i > 0 ? $szLine[$i-1] : null; $szNextChar = $i < $nChars-1 ? $szLine[$i+1] : null; if ($szLine[$i] == '/' && $szNextChar == '/' && !$bInString) // => single line comment break; if ($szLine[$i] == '/' && $szNextChar == '*' && !$bInString) // => multi-line comment - open { $bInComment = true; $i++; continue; } if ($szLine[$i] == '*' && $szNextChar == '/' && !$bInString) // => multi-line comment - close { $bInComment = false; $i++; continue; } if (($szLine[$i] == '"' || $szLine[$i] == "'") && !$bInComment) // => quoted string { if ($bInString) { if ($szLine[$i] == $szStringChar && $szLastChar != "\\") { $bInString = false; $szStringChar = null; } } else { $bInString = true; $szStringChar = $szLine[$i]; } } if (!$bInComment && ($bInString || ($szLine[$i] != ' ' && $szLine[$i] != "\t" && $szLine[$i] != "\r"))) $szRawContent .= $szLine[$i]; } $szRawContent .= "\n"; } $szContent = $szRawContent; }
danke mat! sieht aus als wäre das mit vertretbarem aufwand auf js zu übersetzen.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026