ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Javascript | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
21.06.2005, 19:44 Uhr Kaesebroetchen Posts: 643 Nutzer |
Hallo, ich habe heute versucht mich ein bisschen in JavaScript reinzuarbeiten und zu Testzwecken mal ein Skript erstellt, das einen Text nach c/c++ Schlüssenworten durchsucht und diese mit den neuen [Farben] Tags des Forums ergänzt. Dabei bin ich auf einige merkwürdige Probleme gestossen: Ich suche z.B. nach "struct " mit einem Leerzeichen dahinter. Das klappt soweit ganz gut und wörter wie "structure" in Kommentaren werden ignoriert. Wenn ich jetzt aber z.B. "struct " mit 2 Leerzeichen habe, dann wird das nicht gefunden ! Gibt es da Abhilfe ? Dann suche ich noch eine Funktion mit der ich gezielt Zeichenketten an einer bestimmten Position einfügen kann. Kennt da jemand was ? Und gibt es eigentlich Amiga Browser die mit Javascript String Objekten klarkommen ? Aweb kanns scheinbar nicht. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 10:24 Uhr Solar Posts: 3680 Nutzer |
Zitat: Ja - die fehlerhafte Suchmaske gegen eine fehlerfreie Suchmaske ersetzen. Sorry wenn die Antwort genauso unspezifisch ist wie die Frage. Wenn Du den fraglichen Code-Teil hier posten könntest, wäre sicherlich eine präzisere Antwort möglich... [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 10:58 Uhr Kaesebroetchen Posts: 643 Nutzer |
Zitat: var c4 = c3.replace(/struct /g,"struct "); Ich hatte die entsprechende Seite aber auch oben verlinkt . Das Problem ist, das wenn ich den Suchbegriff ohne Leerzeichen suchen lasse, dann wird z.B. bei der Suche nach int auch intuition verarbeitet. Wenn im Quellcode jetzt mehrere Leerzeichen nach dem int folgen, dann werden diese int's nicht erkannt, obwohl Sie doch eigentlich das Suchkriterium ("int ") erfüllen. Vielleicht gibt es ja auch eine bessere Methode das zu realisieren ? Die Suchen/ersetzen Funktionen sind zwar im Prinzip alle gleich, aber vielleicht wirfst du ja doch mal einen Blick auf die ganze Seite. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 11:01 Uhr Kaesebroetchen Posts: 643 Nutzer |
Das war ja wohl ein Eigentor mit dem Code... natürlich werden die [fett][/fett] Tags im code vom Forum interpretiert... [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 12:39 Uhr Gazelle Posts: 151 Nutzer |
@Kaesebroetchen: Also bei mir geht es: Input: code:int test1; int test2; int test3; int test4; int test5; output: code:int test1; int test2; int test3; int test4; int test5; Vielleicht ist es bei dir ein Tabulator und nicht mehrere Leerzeichen? Falls es mit regexp geht: /int[ t]+/ [ t]+ -> mindestens ein oder mehrere Leerzeichen oder Tabulatoren hth, Bernd [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 12:57 Uhr Solar Posts: 3680 Nutzer |
Bei mir geht's auch...?!? (Sorry, hatte den Link nicht gesehen...) [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 13:01 Uhr Kaesebroetchen Posts: 643 Nutzer |
@Gazelle: Danke ! Genau das war es. Kennst du vielleicht noch eine Funktion, mit der ich eine Zeichenkette an einer bestimmten Position einsetzen kann ? Damit möchte ich dann z.B. "sowas" erreichen. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 13:45 Uhr Gazelle Posts: 151 Nutzer |
Zitat: Das verstehe ich jetzt nicht so ganz? Vielleicht sowas: code:Suche nach: (.*)"([^"]*)"(.*) Ersetzen durch: 1"2"3 Wie gesagt, das sind regular expressions. Ich habe keine Ahnung von Javaskript. Edit: Äh, ich hoffe die Backslash und Klammern stimmen alle :) Bernd [ Dieser Beitrag wurde von Gazelle am 22.06.2005 um 13:46 Uhr editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 14:11 Uhr Kaesebroetchen Posts: 643 Nutzer |
Zitat: Na ja, ich will mit dem script halt c/c++ code farbig so gestalten, das er hier im Forum etwas lesbarer daherkommt. Deshalb will ich z.B. "Text in Klammern farbig hervorheben". Deshalb suche ich eine Funktion mit der ich gezielt an bestimmten Positionen Zeichenketten einbauen kann. Auch für das //Kommentar ->Zeilenumbruch Problem suche ich noch eine Lösung. Zitat: Tja, ich weiß nicht genau was dein code machen soll (bei mir macht er nichts), aber hast du vielleicht einen guten Link wo diese "regular expressions" genauer erklärt werden ? [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 16:07 Uhr Gazelle Posts: 151 Nutzer |
[text gelöscht, siehe unten] [ Dieser Beitrag wurde von Gazelle am 22.06.2005 um 17:03 Uhr editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 16:45 Uhr Gazelle Posts: 151 Nutzer |
@Kaesebroetchen: Ich weiss jetzt was Du brauchst: code:var c26 = c25.replace(/("[^"]*")/g,"{b}{red}$1{/red}{/b}"); und für deine // Kommentare: code:var c## = c##.replace(/(//.*)/g,"{green}$1{/green}"); Kurze Erklärung: Man kann im Suchkriterium diejenigen Teile, welche man beim Ersetzen wiederverwenden möchte mit () umschließen. Diese kann man dann mit $1..$9 (also maximal 9) ansprechen. " -> Zeichen Hochkomma [^"]* -> Alle Zeichen, aber nicht Hochkomma " -> Zeichen Hochkomma Damit findet regex alle Texte, die in Hochkommas eingeschlossen sind. Nachdem ich jetzt den ganzen Teil mittels () eingeklammert habe, kann ich ihn mit $1 beim ersetzen ansprechen. hth, Bernd EDIT: Argl, immer diese Klammern -> Ersetze die geschwungenen Klammern einfach durch eckige. [ Dieser Beitrag wurde von Gazelle am 22.06.2005 um 16:47 Uhr editiert. ] [ Dieser Beitrag wurde von Gazelle am 22.06.2005 um 17:11 Uhr editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 23:04 Uhr Kaesebroetchen Posts: 643 Nutzer |
@Gazelle Danke ! Das klappt ja richtig gut. Machst du das eigentlich beruflich ? Zitat: Und das ".*" steht dafür, das er nach einem Zeilenumbruch sucht ? [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 23:32 Uhr Gazelle Posts: 151 Nutzer |
Zitat: Gern geschehen. Ich bin vom Beruf Programmierer (allerdings Datenbanksysteme unter Unix). Regex sind unter *nix System sehr verbreitet (und eine eigene Wissenschaft für sich :). Zitat: Nein, das macht replace() anscheinend automatisch. .* steht für beliebig viele Zeichen ähnlich dem #?. . bedeutet ein beliebiges Zeichen * bedeutet, dass sich der vorhergehende Ausdruck beliebig oft wiederholen kann. a* würde also beliebig viele "a"s bedeuten (oder keine) a+ dagegen mindestens eines oder mehrere mit [] schränkt man eine Position auf ein Zeichen ein [0-9]+ würde jede Zahl finden. und und und. Dein Code scheint auch ziehmlich Speicherfressend zu sein. Du definierst jedesmal eine neue Variable, Zwei würden reichen. var c1 = (forminhalt) var c2 = c1.replace(...) c1 = c2.replace(...) c2 = c1.replace(...) c1 = c2.replace(...) usw. Vielleicht sogar eine, wenn c1 = c1.replace(...) geht, aber wie gesagt, ich habe mich mit Javascript noch nicht beschäftigt. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2005, 23:39 Uhr Kaesebroetchen Posts: 643 Nutzer |
[quote] Original von Gazelle: Zitat: Ja stimmt wahrscheinlich. Da es aber mein erstes Javascript ist, ging es mir erstmal um die Funktion. Und soviel wird es bei den paar Tausend Zeilen Text schon nicht werden... [ - Antworten - Zitieren - Direktlink - ] |
05.07.2005, 22:43 Uhr _PAB_ Posts: 3016 Nutzer |
Ich habe jetzt mal konkrete Pläne geschmiedet Syntax-Highlighting hier im Forum einzubauen, sodaß man garnicht erst groß konvertieren muß, sondern direkt im [ code ]-Tag die Sprache angibt und dann wird der Code entsprechend dargestellt. Beispiel: [ code language="C"]...[ /code] [ code language="PHP"]...[ /code] Allerdings kann ich noch nicht sagen, ab wann ich mich damit beschäftigen kann, da ich derzeit erstmal einiges anderes zu erledigen habe. @Kaesebroetchen: Danke für Dein Skript, welches ich für "C" sicher gut verwenden kann. Als Inspiration zumindest. :-) [ - Antworten - Zitieren - Direktlink - ] |
05.07.2005, 23:07 Uhr Kaesebroetchen Posts: 643 Nutzer |
@_PAB_: Danke das du dir die Arbeit machst ! Ich bin sicher dass das beim Lesen und Verstehen fremder Quelltexte helfen wird. Ich glaube dass das Unterscheiden von Programmiersprachen vielleicht gar nicht nötig ist. Ich denke die meisten hier benutzen C/C++ und auch die Schlüsselwörter anderen Sprachen, sind oft identisch. Hier ein paar Beispiele: Schlüsselwörter C Schlüsselwörter C++ Schlüsselwörter Java Wenn es aber vom Arbeitsaufwand keinen Unterschied macht, ist eine Trennung sicher wünschenswert. Nochmals danke für deine Bemühungen. Und wenn ich dich irgendwie unterstützen kann, dann schick mir ne mail! [ Dieser Beitrag wurde von Kaesebroetchen am 05.07.2005 um 23:08 Uhr editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
06.07.2005, 11:07 Uhr Holger Posts: 8116 Nutzer |
Zitat: Die gibt es. Da Du ja auch Schlüsselworte ersetzen willst, nach denen evtl eine öffnende Klammer oder ein Zeilenumbruch folgt und natürlich auch keine Wörter finden willst, die z.B. auf int enden, benutze folgendes: code:b ist dabei ein Platzhalter für "Wortgrenze". Zusammen mit der Gazelle gezeigten Rückreferenz kannst Du auch gleich mehrere Schlüsselwörter suchen und ersetzen. Als Wort verwendest Du dann z.B.:bwortb code:Ein einzelner Ersetzungsvorgang ist natürlich auch effizienter als einer pro Schlüsselwort.c1 = c2.replace(/b(if|else|for|while|break|continue)b/g, "$1"); Ein bißchen was zu regulären Ausdrücken findest Du bei Selfhtml mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ Dieser Beitrag wurde von Holger am 06.07.2005 um 11:10 Uhr editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Javascript | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |