我正在寻找这个解决方案已经几个小时了,最终偶然发现了这个问题。我已经尝试了这里的所有解决方案。但是在替换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 + '=' + value);
}
这里的正则表达式
(?<=[?|&])
的意思是,它会匹配 '?' 或 '&' 字符,并且会取出该字符之后的字符串(向该字符后方查找)。这意味着只有
param1=test1
子字符串会被匹配并替换。