Ответ 1
a_href = a_href.replace(/(test_ref=)[^\&]+/, '$1' + updated_test_ref);
У меня есть строка, которая выглядит примерно так:
a_href= "www.google.com/test_ref=abc";
Мне нужно выполнить поиск test_ref = abc в этом выше strinng и заменить его новым значением
var updated_test_ref = "xyz";
a_href ="www.google.com/test_ref=updated_test_ref"
i.e
www.google.com/test_ref=xyz.
Как мы можем это сделать?
EDIT:
Значениеtest_ref может быть ссылкой URL-адреса в виде чего-то вроде http://google.com?param1=test1¶m2=test2. Мне нужно захватить полную стоимость не до первого и.
a_href = a_href.replace(/(test_ref=)[^\&]+/, '$1' + updated_test_ref);
Основываясь на этом обсуждении, я исправил функцию Криса (проблема с регулярной строкой!)
function updateUrlParameter(url, param, value){
var regex = new RegExp('('+param+'=)[^\&]+');
return url.replace( regex , '$1' + value);
}
Основываясь на этом обсуждении, я создал функцию ссылок. наслаждаться
updateUrlParameter(url, param, value){
var regex = new RegExp("/([?|&]" + param + "=)[^\&]+/");
return url.replace(regex, '$1' + value);
}
Я знаю, что это немного грязный код, но я достиг того, что искал. Он заменяет данную строку запроса или добавляет новую, если она еще не существует.
function updateUrlParameter(url, param, value) {
var index = url.indexOf("?");
if (index > 0) {
var u = url.substring(index + 1).split("&");
var params = new Array(u.length);
var p;
var found = false;
for (var i = 0; i < u.length; i++) {
params[i] = u[i].split("=");
if (params[i][0] === param) {
params[i][1] = value;
found = true;
}
}
if (!found) {
params.push(new Array(2));
params[params.length - 1][0] = param;
params[params.length - 1][1] = value;
}
var res = url.substring(0, index + 1) + params[0][0] + "=" + params[0][1];
for (var i = 1; i < params.length; i++) {
res += "&" + params[i][0] + "=" + params[i][1];
}
return res;
} else {
return url + "?" + param + "=" + value;
}
}
Это будет работать, если дать обычные URL-адреса, такие как:
updateUrlParameter('https://www.example.com/some.aspx?mid=1&id=2','id','5');
updateUrlParameter('https://www.example.com/?mid=1&id=2','id','5');
updateUrlParameter('https://www.example.com/some.aspx','id','5');
Обратите внимание, что он НЕ будет работать, только если любое из имени или значения параметра строки запроса содержит символы "=" и/или "&". Это будет хорошо работать за этим.
* Java script, чтобы найти конкретную строку запроса и заменить ее значение *
('input.letter').click(function () {
//0- prepare values
var qsTargeted = 'letter=' + this.value; //"letter=A";
var windowUrl = '';
var qskey = qsTargeted.split('=')[0];
var qsvalue = qsTargeted.split('=')[1];
//1- get row url
var originalURL = window.location.href;
//2- get query string part, and url
if (originalURL.split('?').length > 1) //qs is exists
{
windowUrl = originalURL.split('?')[0];
var qs = originalURL.split('?')[1];
//3- get list of query strings
var qsArray = qs.split('&');
var flag = false;
//4- try to find query string key
for (var i = 0; i < qsArray.length; i++) {
if (qsArray[i].split('=').length > 0) {
if (qskey == qsArray[i].split('=')[0]) {
//exists key
qsArray[i] = qskey + '=' + qsvalue;
flag = true;
break;
}
}
}
if (!flag)// //5- if exists modify,else add
{
qsArray.push(qsTargeted);
}
var finalQs = qsArray.join('&');
//6- prepare final url
window.location = windowUrl + '?' + finalQs;
}
else {
//6- prepare final url
//add query string
window.location = originalURL + '?' + qsTargeted;
}
})
});
Я искал это решение в течение нескольких часов и, наконец, наткнулся на этот вопрос. Я перепробовал все решения здесь. Но все еще существует проблема при замене определенного значения параметра в 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
будет сопоставлена и заменена.