我有一些像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;
}
答案 0 :(得分:3)
您可以在String.prototype.replace()
中使用函数作为第二个参数。
var str = "ABCDE-----FGABC--";
var code = str.replace(/-/g, function() {
return Math.floor(Math.random() * (max - min + 1)) + min;
});
答案 1 :(得分:0)
在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
答案 2 :(得分:0)
作为replace
方法的替代方法,您可以使用String split
方法对代码进行标记,然后应用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>
&#13;