我必须使用正则表达式将函数adjustUrlParameter(url,param)替换或追加到url。如果URL中存在相同的查询,则应使用param替换查询(即ID = 501应在google.com?ID=200中替换ID = 200)。如果不存在查询,则应该只将查询附加到URL的末尾。最后,如果查询确实存在但属性不同,则应附加查询并使用“&”将其与预先存在的查询分开。这是一个例子:
adjustUrlParameter('google.com?ID=501', 'TYPE=444') // => 'google.com?ID=501&TYPE=444'
我的代码没有替换相同的查询类型。它返回'google.com?ID=501&ID=200'而不是返回'google.com?ID=200'。这是我的代码:
var adjustUrlParameter = function(url, param) {
var urlQuery = url.match(/\w+\W+/g);
for (var i = 0; i < urlQuery.length; i++) {
if (param === urlQuery[i]) {
return url.replace(/\?.+$/, '?' + param);
}
}
if (url.match(/\?/)) {
return url + "&" + param;
} else {
return url + "?" + param;
}
};
如何获取adjustUrlParameter('google.com?ID = 501','ID = 201')以返回正确的结果('google.com?ID=201')?
答案 0 :(得分:1)
问题是if语句永远不会返回true。在for循环中放入一些console.log并观察它。你会看到urlQuery [i]何时返回&#34; ID =&#34; param返回&#34; ID = 444&#34;。他们不平等。
console.log("parameter:"+param); //parameter:ID=444
console.log("url_query: "+urlQuery[i]); //url_query: ID=
如果你改变你的for循环,它会用相同的类型替换查询参数:
for (var i = 0; i < urlQuery.length; i++) {
console.log("parameter:"+param);
console.log("url_query: "+urlQuery[i]);
var paramType = param.split("=");
console.log("paramType"+paramType);
var tmp = paramType[0]+"="; //since urlQuery[i] always has a character at the end
console.log(tmp);
if (tmp === urlQuery[i]) {
return url.replace(/\?.+$/, '?' + param);
}
}
当您运行adjustUrlParameter('google.com?ID=501', 'ID=444')
时,输出为"google.com?ID=444"
答案 1 :(得分:0)
您想要比较查询的名称,而不是它们包含的值。
假设您将id=200
作为param
传递,您希望在现有id
中找到并替换url
。这意味着我们不关心id
的价值。如果是这种情况,我们可以按?
或&
进行拆分,以获取所有查询的列表。我们开始在2
循环,因为0
和1
是基础url
和?
。我们还会在每次迭代时跳转2
以跳过前面的&
。最后,我们确保将每个query
与=
分开并使用[0]
或前半部分来获取我们关注的名称。
你可以这样做:
var adjustUrlParameter = function(url, param) {
var urlQuery = url.split(/(\?|\&)/)
, thisQuery = param.split(/\=/)[0]
for (var i = 2; i < urlQuery.length; i = i + 2) {
if (thisQuery === urlQuery[i].split(/\=/)[0]) {
return url.replace(/(\?|\&).*$/, '?' + param);
}
}
if (url.match(/\?/)) {
return url + "&" + param;
} else {
return url + "?" + param;
}
};