juppinger: Variablen bei RegExpr verwenden

Hallo zusammen,

ich will in einer Variable einen Text ersetzen, jedoch weiss ich nicht, wie ich das Lösen soll.

Wenn ich z.B.:

var neuerText = alterText.replace(/ZuSuchenderText/g, "NeuerText");
Habe ich keine Probleme. Nun möchte ich jedoch den zu suchenden Text (Suchtext) aus einer Variable holen, weiss aber nicht, wie ich das machen soll...

var suchText = "ZuSuchenderText";
var neuerText = alterText.replace(/suchText/g, "NeuerText");

Das sucht ja jetzt nicht nach "ZuSuchenderText", sondern nach "suchText".

Kann mir jemand helfen, bitte?

Gruß
juppinger

  1. Hallo,

    Schau mal einige Threads unter deinem, da wurde diese Frage bereits gestellt und beantwortet:
    https://forum.selfhtml.org/?t=135748&m=881190

    Mathias

    1. gruss juppinger, hi molily,

      Schau mal einige Threads unter deinem, da wurde diese Frage
      bereits gestellt und beantwortet:
      https://forum.selfhtml.org/?t=135748&m=881190

      @molily
         nicht ganz, bei juppinger versteckt sich das eigentliche problem
         ganz woanders:

      @juppinger

      ... Nun möchte ich jedoch den zu suchenden Text (Suchtext)
      aus einer Variable holen, weiss aber nicht, wie ich das machen
      soll...

      var suchText = "ZuSuchenderText";
      var neuerText = alterText.replace(/suchText/g, "NeuerText");

      Das sucht ja jetzt nicht nach "ZuSuchenderText", sondern
      nach "suchText".

      richtig - bei dem ausdruck /suchText/g handelt es sich um ein RegExp-literal.
         die literalschreibweise ist aber nicht die einzige moeglichkeit RegExp-Objekte
         zu erzeugen.
         es gibt auch den RegExp-Konstruktor, den man mit suchmuster und optionalen
         flags fuettern kann.

      fuer Dein bsp. gestaltet sich das dann folgendermassen:

      ~~~javascript var alterText = "richtig - bei dem ausdruck /suchText/g handelt es sich um ein RegExp-literal.";
         var suchText = "handelt es sich um ein";
         var regXSearch = new RegExp(suchText, "g");

      alert(regXSearch + "\n" + (/handelt es sich um ein/g));

      var neuerText = alterText.replace(regXSearch, "spricht man auch von einem");

      alert(alterText + "\n\n" + neuerText);

        
        
         dabei ist aber zu beachten, dass alle zu suchenden Texte, die Steuerzeichen  
         enthalten, wie sie auch in regulaeren ausdruecken zur anwendung kommen,  
         nicht mit diesem einfachen vorgehen gefunden werden koennen.  
         diese steuerzeichen muessen vor der uebergabe an den konstruktor maskiert  
         werden. deshalb sollte man sich einer methode bedienen, die so aussehen  
         koennte:  
        
         ~~~javascript
      String.prototype.toRegExpString = function () {  
           return this.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/g,"\\$1");  
         };  
         var alterText = "richtig: bei dem ausdruck (\/suchText\/g) handelt es sich um ein RegExp-literal.";  
         var suchText = "richtig: bei dem ausdruck (\/suchText\/g) handelt es sich um ein RegExp-literal.";  
         var regXSearch = new RegExp(suchText.toRegExpString());  
        
         alert(regXSearch + "\n" + (/richtig: bei dem ausdruck (\/suchText\/g) handelt es sich um ein RegExp-literal./));  
        
         var neuerText = alterText.replace(regXSearch, "genau, denn \/suchText\/g ist ein RegExp-literal!");  
        
         alert(alterText + "\n\n" + neuerText + "\n\n" + alterText.replace(/richtig: bei dem ausdruck (\/suchText\/g) handelt es sich um ein RegExp-literal./, "uups, something wrong here!"));
      

      viel erfolg - peterS. - pseliger@gmx.net

      --
      »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
      Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
      ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]