我有以下函数用随机数替换字符串出现。我目前用相同的随机数替换字符串。我需要一个函数来替换每个实例一个唯一的数字。这就是我所拥有的。
尝试澄清:
我希望找到'},{
的所有匹配项,并将其替换为},"random":{
,其中random
是每次出现的唯一整数。
result = this.replaceAll(result, '},{', `},"${this.getRandomInt(1, 2000)}":{`);
private getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
private replaceAll(str, find, replace) {
return str.replace(new RegExp(this.escapeRegExp(find), 'g'), replace);
}
private escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
目前结果是
的结果},"1340":{"expense_category_id":"63","amount":3},"1340":{"expense_category_id":"62","amount":3}}}}
1340不应该重复
编辑:替换all之前的结果值是:
},{"expense_category_id":"63","amount":3},{"expense_category_id":"62","amount":3}}}}
答案 0 :(得分:5)
将函数传递给replace()
第二个参数,如下所示:
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function replaceAll(str, find, replace) {
return str.replace(new RegExp(this.escapeRegExp(find), 'g'), replace);
}
function escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
var input = '},{"expense_category_id":"63","amount":3},{"expense_category_id":"62","amount":3}}}}',
result = replaceAll(input, '},{', (x => '},"' + getRandomInt(1, 2000) + '":{'));
console.log(result);

我不确定原因,但它似乎使用为第一次迭代生成的相同字符串进行后续迭代。使用函数,您可以强制它每次运行。
答案 1 :(得分:1)
你的替换电话是错误的。你传入一个字符串,你应该是p assing in a function that creates the number,而不是数字本身的结果。
let result = "{A},{B},{C}";
result = replaceAll(result, '},{', () => { return `},"${this.getRandomInt(1, 2000)}":{` });
console.log(result);
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function replaceAll(str, find, replace) {
return str.replace(new RegExp(this.escapeRegExp(find), 'g'), replace);
}
function escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}