+ Antworten
Ergebnis 1 bis 6 von 6

Thema: replace() bei zeilenumbruch

  1. #1
    TP-Junior stinger_5 macht alles soweit korrekt
    Registriert seit
    Jan 2009
    Beiträge
    5

    replace() bei zeilenumbruch

    Hallo,

    ich habe da ein kleines Problem mit der Funktion replace().
    Ich nutze es für die Umsetzung von BBCode nach HTML. Das funktioniert soweit auch ganz gut. Selbst verschachtelte Befehle werden korrekt übersetzt:
    HTML-Code:
    [u][b]Hier[/b]ist[b]was[/b]fett[/u]
    Ergebnis: Hieristwasfett

    Wenn ich jedoch einen Zeilenumbruch einfüge, werden die Tags nicht mehr übersetzt:
    HTML-Code:
    [u][b]Hier[/b]ist
    [b]was[/b]fett[/u]
    Ergebnis: [ u ]Hieristwasfett[ /u ]

    Die Suchargumente befinden sich in einem Array, das ich auslese und in einer schleife durchgehe:
    HTML-Code:
    <script type="text/javascript">
      var aBBeditortools = new Array(
        new Array('Fett', '\\[b\\](.*?)\\[\\/b\\]', '<b>$1</b>'),
        new Array('Unterstrichen', '\\[u\\](.*?)\\[\\/u\\]', '<u>$1</u>')
      );
    
    function translate(obj) {
      obj.innerHTML = nl2br(obj.innerHTML);
      for(var i=0; i<aBBeditortools.length; i++) {
    	search_arg = eval('/'+aBBeditortools[i][1]+'/gim');
    	obj.innerHTML = obj.innerHTML.replace(search_arg, aBBeditortools[i][2]);
      }
    }
    function nl2br(str) {
      return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/gm, '$1<br />$2');
    }
    </script>
    Flag "m", welcher ja für "Multiline Input" steht, scheint keinen Einfluss zu haben.
    Hat jemand eine Idee wie ich das gelöst bekomme?

    Viele Grüße,
    stinger

  2. #2
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Zitat Zitat von stinger_5 Beitrag anzeigen
    Flag "m", welcher ja für "Multiline Input" steht, scheint keinen Einfluss zu haben.
    Hallo stinger,

    der Modifier m funktioniert nur, wenn Du das Muster mit Start-/Endpunkt (^ … $) angibst, oder? Du kannst auch mal den Modifier x probieren, der Whitespace (darunter fällt auch \r und \n) im Suchmuster ignoriert.

  3. #3
    TP-Junior stinger_5 macht alles soweit korrekt
    Registriert seit
    Jan 2009
    Beiträge
    5
    Danke für die schnelle Antwort.
    hm...kann es sein das es bei JavaScript das /s ist? Ein Modifier x finde ich nicht bei selfhtml

    Leider klappt das damit nicht bzw. habe ich allgemein einige schwierigkeiten mit solchen Regulären Ausdrücken^^ Habe inzwischen auch ein Tool gefunden, womit ich das besser ausprobieren kann: http://regexlib.com/RESilverlight.aspx

    Das (.*?) sollte aber doch alle Zeichen einschließen. Whitespace ist ja da auch drin, wenn ich es teste. Nur beim Zeilenumbruch \n klappt es dann nicht mehr.
    Wo müsste ich den Modifier /s denn platzieren?

  4. #4
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Zitat Zitat von stinger_5 Beitrag anzeigen
    hm...kann es sein das es bei JavaScript das /s ist?
    /s steht für String as single line und ist das Gegenteil von /m


    Zitat Zitat von stinger_5 Beitrag anzeigen
    Ein Modifier x finde ich nicht bei selfhtml
    Da findest Du so einiges nicht.


    Zitat Zitat von stinger_5 Beitrag anzeigen
    Leider klappt das damit nicht bzw. habe ich allgemein einige schwierigkeiten mit solchen Regulären Ausdrücken^^ Habe inzwischen auch ein Tool gefunden, womit ich das besser ausprobieren kann: http://regexlib.com/RESilverlight.aspx
    Tja, das ist häufig das Problem. Wenn generelle Verständigungsprobleme bestehen weiß man nie, ob die Hilfe auch korrekt ausprobiert wurde. Da als Feedback nur ein "geht net" kommt und man nicht sieht was der Hilfesuchende eigentlich probiert hat das nicht funktioniert, ist weiterführende Hilfe schwer.


    Zitat Zitat von stinger_5 Beitrag anzeigen
    Das (.*?) sollte aber doch alle Zeichen einschließen. Whitespace ist ja da auch drin, wenn ich es teste. Nur beim Zeilenumbruch \n klappt es dann nicht mehr.
    Hätte, wäre, wenn, müsste, sollte…
    Zeilenumbrüche sind Steuerzeichen. Wie man am Name schon erkennt, handelt es sich dabei um etwas Besonderes. Wäre ein Steuerzeichen das gleiche wie gewöhnliches Whitespace, dann hätte es nicht seinen eigenen Namen. Es stimmt, der Punkt steht für jedes beliebige Zeichen, aber explizit nicht für New Line (\n) - und genau das ist hier das, was Schwierigkeiten bereitet.


    Zitat Zitat von stinger_5 Beitrag anzeigen
    Wo müsste ich den Modifier /s denn platzieren?
    Da wo alle Modifier hingehören, hinter den abschließenden Delimiter.


    Hier gibt's ein RegExp Cheat Sheet das sich gut zum lernen und spicken eignet.

  5. #5
    TP-Junior stinger_5 macht alles soweit korrekt
    Registriert seit
    Jan 2009
    Beiträge
    5
    Der Modifier x bringt keine Veränderung.
    Wenn RegExp solche schwierigkeiten mit Steuerzeichen hat, dann ist es wahrscheinlich so nicht umsetzbar.

    Ungeachtet dessen lässt sich das Problem einfach umgehen. Ich benötige die Steuerzeichen ja eigentlich nicht im String. Sie werden ja sowiso nicht dargestellt und es reicht, wenn sie durch <br> ersetzt werden. Dazu schreibe ich meine nl2br() um: replace(/(\r\n|\n\r|\r|\n)/gm, '<br />');
    Nur im Quelltext würde man keine Zeilenumbrüche mehr sehen, aber damit kann ich leben.

    Aufjedenfall danke für die Hilfe und den Link zum RegExp Cheat Sheet.

    Gruß,
    stinger

  6. #6
    TP-Veteran Dome bringt sich richtig ein Dome bringt sich richtig ein Avatar von Dome
    Registriert seit
    Feb 2004
    Ort
    Stuttgart
    Beiträge
    1.289
    Du kannst auch, wenn dus ganz korrekt haben willst, nach dem du den BB-Code umgewandelt hast nochmal die <br> in <br>\n umwandeln

    Achja, der Modifier "s" steht auch in PHP für "as single line" also den kompletten Text als eine einzige Zeile betrachten, was bei dir ja richtig wäre...
    Gruß
    Dome
    __________________
    Um mal auf das Renomee-System aufmerksam zu machen: Klick
    TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)

+ Antworten

Ähnliche Themen

  1. Javascript replace()
    Von preyz im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 31.07.2007, 17:33
  2. [MySQL] Replace
    Von Bernhard_at im Forum Traum-Dynamik
    Antworten: 5
    Letzter Beitrag: 06.06.2005, 13:36
  3. x-mixed-replace und IE6
    Von Robin im Forum Traum-Dynamik
    Antworten: 0
    Letzter Beitrag: 22.09.2004, 11:30
  4. replace
    Von Messiah im Forum Traum-Dynamik
    Antworten: 3
    Letzter Beitrag: 20.06.2003, 13:06
  5. Fehler bei str-replace ;/
    Von alfmanuel im Forum Traum-Dynamik
    Antworten: 1
    Letzter Beitrag: 18.05.2003, 17:14

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51