如何用 javascript 中的随机数替换每个破折号 (-)?

How do I replace every dash (-) with a random number in javascript?

我有一些代码,例如 ABCDE-----ABCD-----ABC--,其中每个 (-) 都需要是一个随机数。

我可以使用替换函数将单个破折号更改为随机数,但我不知道如何使每个破折号成为随机数。注意:每个数字不需要是唯一的。

这是我现在所在的位置,但我需要数字不完全相同。 http://jsfiddle.net/oqrstsdm/

var minNumber = 1;
var maxNumber = 9;

randomNumberFromRange(minNumber, maxNumber);

function randomNumberFromRange(min, max) {
    var number = (Math.floor(Math.random() * (max - min + 1) + min));
    var str = "ABCDE-----FGABC--";
    var res = new RegExp("-", "g");
    var code = str.replace(res, number);
    document.getElementById("ccode").innerHTML = "Code: " + code;
}

您可以使用函数作为 String.prototype.replace() 中的第二个参数。

var str = "ABCDE-----FGABC--";
var code = str.replace(/-/g, function() {
  return Math.floor(Math.random() * (max - min + 1)) + min;
});

在 while 循环中执行。此外,您实际上并不需要正则表达式,因为您只是在寻找一个字符串。如果您确实想要将 str.indexOf("-") !== -1 的正则表达式更改为 str.match(regexp) !== null。您也不需要使用这种方法的 g 标志。

var str = "ABCDE-----FGABC--";
var number;
while (str.indexOf("-") !== -1) {
    number = Math.floor(Math.random() * 10);
    str = str.replace("-", number);
}
return str;

输出:

ABCDE92136FGABC38

作为 replace 方法的替代方法,您可以使用字符串 split method to tokenize the code, and then apply an Array reduce 方法将值与替换成的适当数字重新连接起来。

function randomNumberFromRange(min, max) {
  var str = "ABCDE-----FGABC--";

  return str.split("-").reduce(function(prev, val) {
    return prev + rand(min, max) + val;
  });
}

function rand(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
}

// Demo code
document.getElementById("random").onclick = function() {
  document.getElementById("code").innerHTML = randomNumberFromRange(1, 9);
};
<div id="code"></div>
<div>
  <button id="random">Get Code</button>
</div>