Martin: mit match() nach dem Inhalt einer Variablen suchen

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

  1. 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

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. Danke Andreas!

    2. 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

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]