我有以下问题: 我有一个字符串,需要替换不同的正则表达式部分。
因此,我想遍历它:
在我的情况下,它是一个URL,我想为特定参数清空:
cleanURL(url, params) {
params.forEach((param) => {
url = this.updateUrlParameter(url, param, '');
});
我有:
updateUrlParameter(url, param, value) {
const regex = new RegExp(`(${param}=)[^&]+`);
const newURL = url.replace(regex, `$1${value}`);
return newURL;
}
这是我使用它的唯一方法,但是现在我正在重新分配一个函数参数。 这不是我想要的。
我的问题是,
cleanURL(url, params) {
params.forEach((param) => {
this.updateUrlParameter(url, param, '');
});
}
对于每次迭代,总是将SAME url
传递到循环中。最后我只是最后一次替换。
我必须以某种方式将更改后的字符串传递到下一个循环迭代中。
我该如何实现? 也许朝这个方向? 以某种方式嵌套并再次调用该函数?
while(outerI--){
(function(i){
i+=1;//doesn't affect outerI and you wanted 1-length so we add one.
//crap inside your forEach loop but without the i++
})(outerI)
}
我在这里找到的
Woudl很高兴在这里给出提示。 谢谢
欢呼
答案 0 :(得分:1)
在此用例中,重新分配功能参数会很好。
如果您出于任何原因真的不想重新分配函数参数,可以引入一个新变量来为您存储更新的URL。
cleanURL(url, params) {
let newUrl = url;
params.forEach((param) => {
newUrl = this.updateUrlParameter(newUrl, param, '');
});
return newUrl;
}
答案 1 :(得分:1)
如果您不想更改参数,请使用临时变量保存结果。
function updateUrlParameter(url, param, value) {
const newURL = url + param;
return newURL;
}
function cleanURL(url, params) {
let temp = url;
params.forEach((param) => {
temp = updateUrlParameter(temp, param, '');
});
return temp;
}
const params = [1, 2, 3, 4, 5];
const url = 'string';
console.log(cleanURL(url, params));
答案 2 :(得分:0)
String.prototype.replace
不会修改原始字符串,而是创建一个新字符串。
如果您更新clearUrl
方法以在每次迭代中重新分配url
,则应该替换所有参数
cleanURL(url, params) {
params.forEach((param) => {
url = this.updateUrlParameter(url, param, '');
});
}
答案 3 :(得分:0)
与此同时,我也找到了一种方法:
cleanURL(url, params) {
const paramsLength = params.length;
const cleanURL = url;
const recursive = (i, originalURL) => {
this.log('i: ', i);
this.log('originalURL: ', originalURL);
if (i > 0) {
const changedURL = this.updateUrlParameter(originalURL, params[i - 1], '');
return recursive(i - 1, changedURL);
}
return originalURL;
};
// this.log('url: ', url);
return recursive(paramsLength, cleanURL);
}
updateUrlParameter(url, param, value) {
const regex = new RegExp(`(${param}=)[^&]+`);
// this.log('regex: ', regex);
const newURL = url.replace(regex, `$1${value}`);
// this.log('newURL: ', newURL);
return newURL;
}
对此有何想法?