Необходимо заменить подстроку в URL (технически просто строку) на javascript. Строка типа
http://blah-blah.com/search?par_one=test&par_two=anothertest&SearchableText=TO_REPLACE
или
http://blah-blah.com/search?par_one=test&SearchableText=TO_REPLACE&par_two=anothertest
означает, что слово для замены может быть либо в самом конце URL, либо в его середине. Я пытаюсь покрыть это следующим:
var newWord = NEW_SEARCH_TERM; var str = 'http://blah-blah.com/search?par_one=test&SearchableText=TO_REPLACE&par_two=anothertest'; var regex = /^\S+SearchableText=(.*)&?\S*$/; str = str.replace(regex, newWord);
Но что бы я ни делал, я получаю str = NEW_SEARCH_TERM. Более того, регулярное выражение, когда я пробую его в RegExhibit, выбирает слово для замены и все, что следует за ним, не то, что я хочу.
Как написать универсальное выражение для обоих случаев и сохранить правильную строку в переменной?
str.replace(/SearchableText=[^&]*/, 'SearchableText=' + newWord)
\S+ и \S* в вашем регулярном выражении соответствуют всем непробельным символам.
\S+
\S*
Возможно, вы хотите удалить их и якоря.
http://jsfiddle.net/mplungjan/ZGbsY/
ClyFish сделал это, пока я возился
var url1="http://blah-blah.com/search?par_one=test&par_two=anothertest&SearchableText=TO_REPLACE"; var url2 ="http://blah-blah.com/search?par_one=test&SearchableText=TO_REPLACE&par_two=anothertest" var newWord = "foo"; function replaceSearch(str,newWord) { var regex = /SearchableText=[^&]*/; return str.replace(regex, "SearchableText="+newWord); } document.write(replaceSearch(url1,newWord)) document.write('<hr>'); document.write(replaceSearch(url2,newWord))