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:
Ergebnis: HieristwasfettHTML-Code:[u][b]Hier[/b]ist[b]was[/b]fett[/u]
Wenn ich jedoch einen Zeilenumbruch einfüge, werden die Tags nicht mehr übersetzt:
Ergebnis: [ u ]Hieristwasfett[ /u ]HTML-Code:[u][b]Hier[/b]ist [b]was[/b]fett[/u]
Die Suchargumente befinden sich in einem Array, das ich auslese und in einer schleife durchgehe:
Flag "m", welcher ja für "Multiline Input" steht, scheint keinen Einfluss zu haben.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>
Hat jemand eine Idee wie ich das gelöst bekomme?
Viele Grüße,
stinger
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
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?
/s steht für String as single line und ist das Gegenteil von /m
Da findest Du so einiges nicht.
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.
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.
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.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
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
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!)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)