Я искал это решение в течение нескольких часов и, наконец, наткнулся на этот вопрос.Я перепробовал все решения здесь.Но все еще существует проблема при замене определенного значения параметра в URL.Давайте возьмем пример URL-адреса, например
http://google.com?param1=test1¶m2=test2&anotherparam1=test3
, а обновленный URL-адрес должен быть похож на
http://google.com?param1=newtest¶m2=test2&anotherparam1=test3
, где значение param1
изменяется.
В этом случае, как указывало @ Panthro , добавление [?|&]
перед строкой запроса гарантирует, что anotherparam1
не будет заменено.Но это решение также добавляет «?»или символ '&' для соответствующей строки.Таким образом, при замене совпавших символов, «?»или '&' также будет заменено.Вы не будете точно знать, какой символ заменен, поэтому вы также не можете добавить этот символ.
Решение состоит в том, чтобы соответствовать '?'или '&' только в качестве предыдущих символов.
Я переписал функцию @ Chris , исправив проблему со строкой, и добавил аргумент без учета регистра.
updateUrlParameter(url, param, value){
var regex = new RegExp('(?<=[?|&])(' + param + '=)[^\&]+', 'i');
// return url.replace(regex, param + '=$1' + value);
return url.replace(regex, param + '=' + value);
}
Здесь (?<=[?|&])
означает, что регулярное выражение будет соответствовать '?'или '&' char и возьмет строку, которая появляется после указанного символа (смотрит за символом).Это означает, что только подстрока param1=test1
будет сопоставлена и заменена.