如何在javascript中用随机数替换每个短划线( - )?

时间:2015-03-21 02:05:48

标签: javascript regex random str-replace

我有一些像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;
}

3 个答案:

答案 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;
&#13;
&#13;