Nico: Regulärer Ausdruck in Javascript, Zeichen ausschließen

Hallo ihr da draußen!

Ich habe mit einem Javascript folgenden regulären Ausdruck erstellt:

/[f](.+)[/f]/

Später soll die Fundstelle mit xxx.replace() ersetzt werden.

Das Problem: In der Variable

var test = "[f]sonstwas[/f] irgendein Text [f]wieder Text[/f]";

würde der geklammerte Ausdruck (.+)

"sonstwas[/f] irgendein Text [f]wieder Text"

beinhalten. Ich möchte aber, dass er bei einem ersten Durchlauf nur "sonstwas" enthält. Gibt es die Möglichkeit, den Geklammerten Ausdruck dahingehen zu erweitern, dass alle Zeichen erlaubt sind außer z. B. "[" (was das Problem lösen würde)?

Mit [^[] habe ich schon experimentiert, bin aber offenbar zu doof, diese Ausschlussregel anzuwenden. Vielen Dank für eure Hilfe!

  1. Hello out there!

    /[f](.+)[/f]/
    Das Problem: In der Variable
    var test = "[f]sonstwas[/f] irgendein Text [f]wieder Text[/f]";
    würde der geklammerte Ausdruck (.+)
    "sonstwas[/f] irgendein Text [f]wieder Text"
    beinhalten.

    Ja, weil er „gierig“ ist. ↗ <http://de.selfhtml.org/perl/sprache/regexpr.htm#gierig_genuegsam@title=Gierige und genügsame Suchmuster>

    Ich möchte aber, dass er bei einem ersten Durchlauf nur "sonstwas" enthält.

    Dass der Ausdruck also „genügsam“ ist: /[f](.+?)[/f]/
                                                    ^

    Mit [^[] habe ich schon experimentiert,

    Damit sollte es auch gehen. Innerhalb von [] gelten allerdings andere Regeln: '[' muss nicht maskiert werden. /[f]([[1]+)[/f]/

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)

    1. ↩︎

    1. Hey Gunnar,

      du bist großartig. Das funktioniert exzellent. Da habe ich stundenlang rumgedengelt und dann ist es so einfach. LOL

      Danke
      Nico

      1. Okay, ich konnte es dann doch selbst lösen. Schreibe ich nur, falls es sich jemand im Archiv anguckt:

        $eintragHtml = preg_replace('/[f](.+?)[/f]/','<b>\1</b>',$eintragHtml);

    2. Hallo!

      Ich habe mich ein wenig zu früh gefreut.

      Dass der Ausdruck also „genügsam“ ist: /[f](.+?)[/f]/

      In Javascript funktioniert das mit dem "genügsamen" Script wunderbar:

      while(text.search(/([f](.+?)[/f])/)>=0) text = text.replace(RegExp.$1,'<b>'+RegExp.$2+'</b>');

      In PHP will es aber partout nicht gehen. Ich bekomme immer ein ereg_replace(): REG_BADRPT. Der Code:

      $eintragHtml = ereg_replace("[f](.+?)[/f]","<b>\1</b>",$eintragHtml);

      Was muss man denn in PHP anders machen oder wo liegt der Fehler?

      Nico

      1. Hello out there!

        $eintragHtml = ereg_replace("[f](.+?)[/f]","<b>\1</b>",$eintragHtml);

        Was muss man denn in PHP anders machen oder wo liegt der Fehler?

        Vielleicht solltest du preg_replace verwenden?

        (Einer der Gründe, warum ich mit dieser „Web-Matratze“ PHP [Cybaer] gelegentlich spiele, sie aber nie zur echten Freundin haben werde: Es gibt (zu!) viele Funktionen, die dasselbe tun, nur jede mit ihren Eigenheiten.)

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    3. gudn tach!

      Mit [^[] habe ich schon experimentiert,

      Damit sollte es auch gehen. Innerhalb von [] gelten allerdings andere Regeln: '[' muss nicht maskiert werden.

      ja, muss nicht, darf aber; und ebenso braucht ausserhalb von zeichenklassendefinitionen ] nicht maskiert zu werden.
      also statt

      /[f]([[1]+)[/f]/

      sollte auch

      /[f]([[2]+)[/f]/

      funzen.

      prost
      seth


      1. ↩︎

      2. ↩︎