Michael: dynamische RegExp

Hallo,

ist es möglich, mit JS folgenden Perl-Code zu simulieren:

$regexpr="huhu" <-- dynamischer Wert!
if($suchstring =~/$regexpr/)
{....usw...}
?

Meine Versuche mit
var regexpr="/huhu/";
if(SuchString.search(regexpr)!=-1)
{ ... usw

will der liebe browser nicht ;-)

Kennt wer eine Lösung?

Danke

Mischa

  1. Meine Versuche mit
    var regexpr="/huhu/";
    if(SuchString.search(regexpr)!=-1)
    will der liebe browser nicht ;-)

    In <../../tecj.htm#a3> sieht die Syntax auch irgendwie anders ganz aus ... allerdings weiß ich nicht, ob man in dem dortigen Beispiel statt der Konstante "au" auch eine Variable hätte angeben können ...

  2. Hallo Micha,

    $regexpr="huhu" <-- dynamischer Wert!
    if($suchstring =~/$regexpr/)
    {....usw...}
    ?

    Meine Versuche mit
    var regexpr="/huhu/"; <-- Fehler

    Der Browser sucht jetzt nach "huhu". Du mußt den Aufruf so bilden:
    var regexpr="/"+huhu+"/";

    natürlich unter der Voraussetzung, "huhu" wurde auch als Variable definiert.

    Viele huhu-Grüße

    Antje :-)))

  3. Hi Mischa!

    Meine Versuche mit
    var regexpr="/huhu/";
    if(SuchString.search(regexpr)!=-1)
    { ... usw

    Damit wuerdest Du ja nach der Zeichenkette "/huhu/" suchen, Du willst ja aber nur nach dem RegExp /huhu/ suchen (der letztlich auch nur die Zeichenkette "huhu" darstellt).

    Also wenn Du nur nach einfach Zeichenketten suchen willst, duerfte
        var s = "huhu";
        if (suchstring.search(s) > -1) ...
    ausreichen.

    Wenn Du aber nach komplexeren Ausdruecken wie /\d+huhu/g suchen willst, geht das in dieser Art wohl nicht mehr. Weiss ich aber nicht, weil ich mit RegExp in JS alles andere als fit bin. Folgende Varianten biete ich Dir mal zum Ausprobieren an:
    1.  var regexp = /\d+huhu/;
        if (suchstring.search(regexp) > -1) ...
    2.  var regexp = '/\d+huhu/';
        if (suchstring.search(eval(regexp)) > -1) ...
    3.  var regexp = '/\d+huhu/';
        if (eval("suchstring.search(" + regexp + ")") > -1) ...

    Waere schoen, wenn Du du mal alle Varianten ausprobieren koenntest und die Ergebnisse hier postest, wenn moeglich vielleicht sogar mit verschiedenen Browsern. Ich denke naemlich, diese Frage ist guter Stoff fuer die Forumsauslese.

    Calocybe

    1. 1.  var regexp = /\d+huhu/;
          if (suchstring.search(regexp) > -1) ...
      2.  var regexp = '/\d+huhu/';
          if (suchstring.search(eval(regexp)) > -1) ...
      3.  var regexp = '/\d+huhu/';
          if (eval("suchstring.search(" + regexp + ")") > -1) ...

      Calocybe

      Hallo Calocybe, hallo Michael

      ich habe es  mittlerweile raus, wie es geht. Auch komplexe Suchausdrücke sind möglich.

      Generell sollte man z.B. so verfahren:

      <script language="JavaScript">
      <!--
      text="Schönes Wetter huhu heute nett ";
      huhu="et";
      var regexp ="/"+huhu+"+/";

      if (text.search(eval(regexp))>-1)alert("richtig");else alert("false");
      //-->
      </script>

      die Variablenzuweisung erfolgt nach dem gewohnten Verfahren über Stringaddition. Komplexere Ausdrücke wie oben müssen zusatzlich mittels eval umgewandelt werden.

      Aufpassen muß man bei Ausdrücken der Form
      /\B usw. hier muß der \ zusätzlich maskiert werden.

      Also so z.B.

      <script language="JavaScript">
      <!--
      text="Schönes Wetter huhu heute nett ";
      huhu="/\bnett\b/";
      var regexp =huhu;

      if (text.search(eval(regexp))>-1)alert("richtig");else alert("false");

      //-->
      </script>

      Viele Grüße

      Antje