Probleme mit RegExp() Syntax in Constructor
Christian Schäfer
- javascript
hallo!
ich habe hier einen ausdruck wie folgt:
/([b])/
dieser matcht die zeichenkette '[b]'.
mit zeichenkette.search(/([b])/) funktioniert das ganz prima.
allerdings möchte ich gerne diesen ausdruck dynamisch ahlten und das 'b' darin gegen eine variable austauschen.
in einen ausdruck direkt kann man meines wissen keine variable schreiben. (also zeichenkette.search(/([VARIABLE])/) geht nicht.. )
daher möchte ich mich des RegExp objektes bedienen und instanziere wie folgt:
var re = new RegExp("([" + VARIABLE + "])");
eine kleinigkeit geht dabei allerdings nicht.
die beiden klammern bringen probleme. sind sie weg funktioniert alles. sind sie da, bekomme ich die fehlermeldung 'unmatched )'.
ich brauche aber die klammern für den match...
ich habe schon versucht die klammern zu escapen, aber bin noch nicht erfolgreich gewesen..
wäre schön, wenn mir da jemand helfen könnte.
gruss
/christian
Hallo,
Du mußt die Klammern doppelt escapen (oder korrekter: Du mußt den Backslash escapen):
var VARIABLE = "b";
var re = new RegExp("(\[" + VARIABLE + "\])"); // entspricht /[b]/
var match = re.exec("aaa[b]aaa");
alert(match[0]);
var re = new RegExp("([" + VARIABLE + "])"); // entspricht /[b]/
var match = re.exec("aaa[b]aaa");
alert(match[0]);
var re = new RegExp("([" + VARIABLE + "])"); // entspricht /[b]/
var match = re.exec("aaa[b]aaa");
alert(match[0]);
Ciao,
Andreas
ich glaub's ja nicht. bei einem 'tippfehler' habe ich gerade festgestellt, dass doch alles funktioniert, wenn ich im gegensatz zur selfhtml darstellung den ausdruck in // setze. also:
re = RegExp("/(["+VARIABLE+"])/");
statt:
re = RegExp("(["+VARIABLE+"])");
da komm mal einer drauf.
alle beispiele, die ich heute im netz gelesen habe (und das waren einige) haben die slashes explizit _nicht_ gesetzt...
gruss
/christian
ich glaub's ja nicht. bei einem 'tippfehler' habe ich gerade festgestellt, dass doch alles funktioniert, wenn ich im gegensatz zur selfhtml darstellung den ausdruck in // setze. also:
re = RegExp("/(["+VARIABLE+"])/");
statt:
re = RegExp("(["+VARIABLE+"])");
Hm, bist Du sicher?
Bei mir liefert re = RegExp("/(["+VARIABLE+"])/"); kein Match, sondern null (im Firefox0.1 und im IE6).
Hast Du mein Mini-Script aus meiner ersten Antwort mal probiert?:
var VARIABLE = "b";
var re = new RegExp("(\[" + VARIABLE + "\])"); // entspricht /[b]/
var match = re.exec("aaa[b]aaa");
alert(match[0]);
var re = new RegExp("([" + VARIABLE + "])"); // entspricht /[b]/
var match = re.exec("aaa[b]aaa");
alert(match[0]);
var re = new RegExp("([" + VARIABLE + "])"); // entspricht /[b]/
var match = re.exec("aaa[b]aaa");
alert(match[0]);
var re = RegExp("/(["+VARIABLE+"])/"); // kein match
var match = re.exec("aaa[b]aaa");
alert(match[0]);
Die ersten drei Ausdrücke liefern erwartungsgemäße Ergebnisse. Der vierte aber matcht nicht.
Ciao,
Andreas