2011-05-15 260 views
1

我正在尝试为我创建的网站创建导航系统。我花了几个小时试图弄清楚,但我不明白为什么它不工作 我试图用变量文件名替换所有“index.html”的事件。Javascript String.Replace does not work?

function changeSideNav(filenames) 
{ 
    var urlarray = window.location.href.split("?"); 
    var url = urlarray[0]; 
    alert(url); // This returns "http://localhost/xxx/index.html" 
    var urlspl = url.replace(/index.html/gi,filenames); 
    alert(url.replace(/index.html/i,filenames) +'/'+ filenames); //This returns "http://localhost/xxx/index.html/newpage.html" (if pram was newpage.html). 
    //i txpected it to return "http://localhost/xxx//newpage.html" 
    //set a new source 
    document.getElementById('SideNavIframe').src = urlspl +'/'+ filenames; 
} 

编辑: 我觉得这是奇怪的: 如果我试图取代“/index.htm”明明不是“的index.html”,它消​​除了“/”从输出,所以我得到“ HTTP://localhost/xxxindex.html/newpage.html”。

+0

为什么不简单'url.replace(“/ index.html”,文件名)'? – 2011-05-15 12:25:16

+2

该代码实际上工作得很好。 – Pointy 2011-05-15 12:26:51

+0

如果我是你,我会提出一个'alert(文件名)'来确保你知道正在发生的一切。 – Pointy 2011-05-15 13:11:22

回答

0

你正在指定一个字符串作为正则表达式。尝试指定的子串作为第一PARAM替换(),像这样:

var url = "http://localhost/xxx/index.html"; 
url.replace('index.html','changed.html'); // add 'gi' as 3rd param for all occurrences 

See docs for String.replace

+0

代码已经按照书面形式工作。 – Pointy 2011-05-15 12:28:31

0

http://www.devguru.com/technologies/ecmascript/quickref/regexp_special_characters.html

小数点任何单个 字符匹配除了新行 字符。因此,例如, 字符串“The cat eats moths” 正则表达式/.t/gi将匹配 'cat'中的字母at, 'eats'和'ot'中的字母'at'。 '飞蛾',但不是 'The'的最初'T'。

所以,你必须逃脱周期:

url.replace(/index\.html/gi,filenames) 
+1

但是“。”事实上会匹配“。”在“index.html”就好了。 – Pointy 2011-05-15 12:28:22

+0

@有点,是的......如果你逃脱它。 – Kon 2011-05-15 12:30:21

+0

它也会匹配“。”如果你**不要逃避它,因为“。”匹配任何字符 - 包括“。”。 – Pointy 2011-05-15 13:10:16

1

不知道这是否是您的概率。但是我在这个问题上停留了一个小时。

它是这样的:
str.replace("s1", "s2")不对str做任何事情。

你需要做的:
str=str.replace("s1", "s2");

通知的LHS明确地捕捉替代的结果。

希望它有帮助:)