replace() mit Suchmuster in Variable?
haefti
- javascript
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
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
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
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
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
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);
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