mit match() nach dem Inhalt einer Variablen suchen
Martin
- javascript
Tag allerseits!
Bitte nicht steinigen, ich habe zwar die Lösung für mein Problem gefunden, aber ich verstehe sie nicht :(
Das Folgende hat nicht funktioniert:
var sURL = "http://www.example.com/index.htm?var=1";
var sSuchString = "http://"+window.location.hostname+"/index.htm?var=1";
if(sURL.match(sSuchString)){
alert(sSuchString)
}
Aha, hab ich gedacht, das Fragezeichen muss maskiert werden. Also:
var sSuchString = "http://"+window.location.hostname+"/index.htm?var=1";
Hat auch nicht geklappt. Dann hab ich einfach geraten:
var sSuchString = "http://"+window.location.hostname+"/index.htm\?var=1";
Das klappt. Aber warum?
Wenn ich ohne Stringvariable nach einem Ausdruck suchen würde, würde ich doch so suchen:
if(sURL.match(/http://www.example.com/index.htm?var=1/))
Ich müsste die Slashes maskieren und das Fragezeichen nur einmal.
Gruß und Dank
Martin
Hallo,
das Problem ist, daß Javascript zunächst einmal den String auswertet. Innerhalb eines String markiert ein Backslash Sonderzeichen wie Unicode-Zeichen (\u) oder Steuerzeichen wie einen Zeilenumbruch (\n).
Ergo: bereits bei der Auswertung des Strings wird ein Backslash "geschluckt".
Damit ein Backslash als Backslash im String erhalten bleibt, muß er selbst per Backslash "escaped" werden (oh Mann, Denglish, daß es nur so kracht, sorry...).
Unter http://www.webreference.com/js/column5/workaround.html wird es so erklärt:
Notice that all backslashes must be escaped with a backslash (\), so these characters remain backslashes in the string. If you do not escape these backslashes, they are evaluated as metacharacters with the character that follows. The RegExp() constructor requires its argument to be a regular expression, with the original backslashes in place. The string "\d", for example, is actually the same as "d", but in a regular expression these are not the same.
Ciao,
Andreas
Hallo Andreas.
Damit ein Backslash als Backslash im String erhalten bleibt, muß er selbst per Backslash "escaped" werden (oh Mann, Denglish, daß es nur so kracht, sorry...).
Darum bietet sich ja auch „maskiert“ an.
Einen schönen Donnerstag noch.
Gruß, Ashura