Javascript中的正则表达式替换

Javascript中的正则表达式替换,javascript,regex,string,replace,Javascript,Regex,String,Replace,我有以下几点: var url = "http://my.url/$1/$2/$3"; var params = ["unused", "first", "second", "third"]; 我想为params数组中位置n的元素替换URL中的每个$n元素(即$1将是“第一”,$2将是“第二”,$3将是“第三”) 我有以下代码: var cont=1; while (params[cont]) { url = url.replace(new RegExp("\\$" + cont, "

我有以下几点:

var url = "http://my.url/$1/$2/$3";
var params = ["unused", "first", "second", "third"];
我想为params数组中位置n的元素替换URL中的每个$n元素(即$1将是“第一”,$2将是“第二”,$3将是“第三”)

我有以下代码:

var cont=1;
while (params[cont]) {
    url = url.replace(new RegExp("\\$" + cont, "gm"), params[cont])
    cont++
}
上面的代码是有效的,但是我想知道是否有更好的方法来完成这个替换(没有循环)

事先非常感谢

当然有

url = url.replace(/\$(\d)/g, function(_, i) {
   return params[i];
});
UPD(学究模式):正如@undefined指出的,仍然存在一个循环。但是由
String.prototype.replace
函数为启用了
g
标志的regexp实现的隐式函数。

使用replace函数:


如您所见,不需要使用“未使用”元素。

但是这个“未使用”元素正在我的params数组中提交。它是一个不需要替换的元素,但用于以后的额外处理,因此在替换过程中必须跳过它。在这种情况下,可以使用Yury的代码。没有我的调整,它是完全相似的。你的也很好(基本上是一样的),但不幸的是,两个答案不能被接受。。。但是,这是我的投票。严格来说,这也是一个循环。@未定义至少不是显式循环。我怀疑一个人可以在没有某种循环的情况下进行多次替换(未知数量的令牌)。是的,这就是问题的答案。你的代码工作正常,甚至使用了隐式循环,我更喜欢它,因为它简单。非常感谢。
var url = "http://my.url/$1/$2/$3";
var params = [ "first", "second", "third"];

url = url.replace (/\$(\d)/g, function(a,b) { return params[Number(b)-1]; });