Variablen bei RegExpr verwenden
juppinger
- javascript
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
Hallo,
Schau mal einige Threads unter deinem, da wurde diese Frage bereits gestellt und beantwortet:
https://forum.selfhtml.org/?t=135748&m=881190
Mathias
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