Строка Javascript.Замена не работает?

#javascript #replace #split

#javascript #заменить #разделить

Вопрос:

В настоящее время я пытаюсь создать навигационную систему для веб-сайта, который я создаю. Я потратил часы, пытаясь разобраться в этом, но я не понимаю, почему это не работает, я пытаюсь заменить все вхождения «index.html «с переменными именами файлов.

 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.html «вместо»index.html «, это удаляет «/» из выходных данных, поэтому я получаю «http://localhost/xxxindex.html/newpage.html «.

Комментарии:

1. Почему не просто url.replace("/index.html", filenames) ?

2. Этот код на самом деле работает просто отлично.

3. На вашем месте я бы ввел alert(filenames) , чтобы быть уверенным, что вы знаете все, что происходит.

Ответ №1:

Не уверен, была ли это ваша проблема. Но я застрял на этом на добрый час.

Вот оно:
str.replace("s1", "s2") ничего не делает с str.

Вам нужно сделать:
str=str.replace("s1", "s2");

Обратите внимание, что LHS явно фиксирует результат замены.

Надеюсь, это поможет 🙂

Ответ №2:

Вы указываете строку в виде регулярного выражения. Попробуйте указать подстроку в качестве 1-го параметра для замены(), например:

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

Смотрите документы для String.replace

Ответ №3:

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

Десятичная точка соответствует любому одиночному символу, кроме символа новой строки. Так, например, со строкой «Кошка ест мотыльков» регулярное выражение /.t /gi будет соответствовать буквам ‘at’ в ‘cat’, ‘at’ в ‘eats’ и ‘ot’ в ‘moths’, но не начальной ‘T’ в ‘The’.

Итак, вам нужно избежать точки:

 url.replace(/index.html/gi,filenames)
  

Комментарии:

1. Но «.» на самом деле будет соответствовать «.» в «index.html «просто отлично.

2. @Pointy, да… если вы избежите этого.

3. Он также будет соответствовать «.», если вы не экранируете его, потому что «.» соответствует любому символу, включая «.».