打字稿/ Javascript:用随机数替换所有字符串出现次数

时间:2017-04-19 19:31:14

标签: javascript typescript

我有以下函数用随机数替换字符串出现。我目前用相同的随机数替换字符串。我需要一个函数来替换每个实例一个唯一的数字。这就是我所拥有的。

尝试澄清:

我希望找到'},{的所有匹配项,并将其替换为},"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}}}}

2 个答案:

答案 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");
    }