Javascript正则表达式-从url中删除变量(如果存在)

Javascript正则表达式-从url中删除变量(如果存在),javascript,jquery,regex,query-string,str-replace,Javascript,Jquery,Regex,Query String,Str Replace,我有一个网址:http://localhost/example/product/illimani/?lang=fr?lang=fr 现在我想删除这个?lang=fr,因为这个url已经存在了 我希望你能理解我的问题 如果已经存在,请删除lang=fr,否则不要删除。您可以使用: url.replace(/(\?lang=fr)+/g, '?lang=fr') 要将多个出现的?lang=fr替换为一个。您可以使用 var re = /(\?[\w|=]*)+\1/; var str = 'h

我有一个网址:
http://localhost/example/product/illimani/?lang=fr?lang=fr

现在我想删除这个
?lang=fr
,因为这个url已经存在了

我希望你能理解我的问题

如果已经存在,请删除lang=fr,否则不要删除。

您可以使用:

url.replace(/(\?lang=fr)+/g, '?lang=fr')

要将多个出现的
?lang=fr
替换为一个。

您可以使用

 var re = /(\?[\w|=]*)+\1/; 
var str = 'http://localhost/example/product/illimani/?lang=fr?lang=fr?lang=fr';

str.match(re);

应删减
re
,以更通用的格式包含URL参数。这将仅替换连续的重复项。如果您想找到不一致的重复项,那么应该使用编程语言IMHO。然后,您可以将其替换为特殊代码
$1 backreference

如果您只想处理您描述的一个场景,您可以执行一个简单的替换:

var new_url = url.replace(/(\?lang=fr)+/g, '?lang=fr');
要处理所有重复变量,请尝试以下操作:

var new_url = url;
var temp = '';
while( temp != new_url) { // need this in case params are out of order
    temp = new_url;
    new_url = temp.replace(/([&?])([^=&?]+=[^=&?]+)(.*)\2/g, '$1$2$3');
}
new_url = new_url.replace(/[&?]+/g, '&').replace(/&+/, '?').replace(/&$/, '');

例如,这将变成
http://localhost/example/product/illimani/?foo=bar&lang=fr?foo=bar&lang=fr
进入
http://localhost/example/product/illimani/?foo=bar&lang=fr

从另一个页面到达,您应该找到它的来源,并在更改页面之前使用条件来检查它是否会重复。我在哪里传递url字符串?如果两次出现之间有什么东西,这将不会替换字符串。@Aashray-是的。我没有考虑过这种可能性