#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
Ответ №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. Он также будет соответствовать «.», если вы не экранируете его, потому что «.» соответствует любому символу, включая «.».