haefti: replace() mit Suchmuster in Variable?

Hallo!
Ich habe folgendes Problem.
Ich möchte in einem String verschiedene Platzhalter durch Werte aus einem XML-String ersetzen und dafür String.replace() verwenden. Da ich die Platzhalter frei wählen kann, wollte ich es clever lösen und sie genauso nennen wie die XML-Knoten, deren Wert sie ersetzen soll.
Ich dachte damit könnte ich dann über die Knoten iterieren und den regulären Ausdruck von replace() in jedem Durchlauf per Variable verändern, aber selbst folgende Lösung geht schon nicht:

originalstring = "ich will suchen.";
suchmuster = "/suchen/";
ersetzung = "ersetzen";
document.write(originalstring.replace(suchmuster, ersetzung);

Gibt es irgendeine Möglichkeit, replace() eine Variable als regulären Ausdruck unterzuschieben oder das Problem anders zu lösen?

Vielen Dank!

haefti

  1. Hallo haefti,

    Gibt es irgendeine Möglichkeit, replace() eine Variable als regulären Ausdruck unterzuschieben oder das Problem anders zu lösen?

    Dir werden sicherlich RegExp-Objekte weiterhelfen.

    Gruß
    Olaf

  2. hi,

    Gibt es irgendeine Möglichkeit, replace() eine Variable als regulären Ausdruck unterzuschieben

    Ja - indem du ein neues RegExp-Objekt erzeugst.

    (In SELFHTML nicht sonderlich gut beschrieben - die Mozilla Core JavaScript 1.5 Reference bzgl. RegExp ist ausführlicher.)

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke erstmal für die schnellen Antworten!

      (In SELFHTML nicht sonderlich gut beschrieben - die Mozilla Core JavaScript 1.5 Reference bzgl. RegExp ist ausführlicher.)

      Ich habe übrigens einen Fehler gemacht, denn mit

      originalstring = "ich will suchen.";
      suchmuster = /suchen/; // ohne Anführungsstriche!
      ersetzung = "ersetzen";
      document.write(originalstring.replace(suchmuster, ersetzung);

      geht zumindest das Auslagern des regulären Ausdrucks in eine Variable sehr wohl.

      Wie ich mit dem RegExp-Objekt jetzt allerdings noch ersetzen und nicht nur suchen kann, weiß ich noch nicht.
      Da muss ich nochmal genauer nachlesen.
      Ciao!

      haefti

      1. hi,

        Wie ich mit dem RegExp-Objekt jetzt allerdings noch ersetzen und nicht nur suchen kann, weiß ich noch nicht.

        Du übergibst dein RegExp-Objekt einfach der replace-Methode eines String-Objektes als ersten Parameter:

        var myRegEx = new RegExp(...);  
        var myData = "Hello World";  
        var newData = myData.replace(myRegEx, "whatever");
        

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Du übergibst dein RegExp-Objekt einfach der replace-Methode eines String-Objektes als ersten Parameter:

          var myRegEx = new RegExp(...);

          var myData = "Hello World";
          var newData = myData.replace(myRegEx, "whatever");

            
          Klasse, danke!  
          Für alle, die so was vielleicht auch mal brauchen:  
            
          var pattern = "\\[" + placeholder + "\\]"; // placeholder ist ein beliebiger String (Hier wird nach einem Platzhalter in eckigen Klammern gesucht)  
          var value = replacement;                   // replacement ist ein beliebiger String  
          myRegEx = new RegExp(pattern, "g");        // mit "g" wird er greedy  
          outputString = outputString.replace(myRegEx, value);  
          
          
  3. Hallo haefti.

    originalstring = "ich will suchen.";
    suchmuster = "/suchen/";
    ersetzung = "ersetzen";
    document.write(originalstring.replace(suchmuster, ersetzung);

    Gibt es irgendeine Möglichkeit, replace() eine Variable als regulären Ausdruck unterzuschieben oder das Problem anders zu lösen?

    Ja, erzeuge „suchmuster“, indem du ein RegExp-Objekt erzeugst.

    Einen schönen Donnerstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules