6

我试图用数组索引值替换所有出现的字符串,如下所示。

var str = '<a href="{0}" title="{1}">{1}</a>';
var params= [];
params.push('Url', 'TitleDisplay');

for (i in params) {
    var x = /'{' + i + '}'/g;
    str = str.replace(x, params[i]);
}

无论我做什么,我似乎都无法让它发挥作用。删除 '/g' 适用于一场比赛,但不是全部。我知道这是基本的,但对于我来说,我无法让它发挥作用。

4

4 回答 4

8

在这里提琴

代码:

var rx = /{([0-9]+)}/g;
str=str.replace(rx,function($0,$1){return params[$1];});

replace 方法循环遍历字符串(因为 /g 在正则表达式中)并找到 {n} 的所有实例,其中 n 是一个数字。$1 捕获数字并且函数将 {n} 替换为 params[n]。

于 2012-07-12T07:44:36.200 回答
2

尝试使用这个:

var x = new RegExp("\\{" + i + "\\}", "g");

而不是这个:

var x = /'{' + i + '}'/g;
于 2012-07-12T06:36:00.560 回答
2

如果您需要它是动态的,您可以构建一个正则表达式对象

var str = '<a href="{0}" title="{1}">{1}</a>';
var params= [];
params.push('Url', 'TitleDisplay');

for (var i = 0; i < params.length; i++) {
    var x = new RegExp('(\\{'+i+'\\})', 'g');
    str = str.replace(x, params[i]);
}
alert(str);
​

http://jsfiddle.net/LByBT/

于 2012-07-12T06:36:44.653 回答
1

如果您想跳过正则表达式解决方案怎么办..

function replaceAllOccurrences(inputString, oldStr, newStr) 
{
    while (inputString.indexOf(oldStr) >= 0)
    {
        inputString = inputString.replace(oldStr, newStr);
    }

    return inputString;
}
于 2014-08-07T19:29:19.010 回答