Javascript将字符串中的标记提取到数组中

时间:2015-03-18 13:41:04

标签: javascript regex

我有一个字符串:The zoo has a panda named {{123}} that is colored {{234}}

我有一个代表每个标记的数组,如:

[ { label: 'Ralph', id: '123' }, { label: 'White and Black', id: '234' } ]

我想遍历字符串并将{{token}}替换为实际标签但是我还需要跟踪我正在替换的字符位置。拉尔夫将成为26号角色。更棘手的情况是:在用{{123}}替换Ralph后,颜色的文本位置会有所不同,因为Ralph是5个字符,令牌是7个字符。

有关解决这个问题的最快方法的想法吗?

2 个答案:

答案 0 :(得分:7)

这可能不像你想象的那么难:

var str = "The zoo has a panda named {{123}} that is colored {{234}}";
var array = [ { label: 'Ralph', id: '123' }, { label: 'White and Black', id: '234' } ];

for(var i = 0; i < array.length; i++){
  str = str.replace("{{" + array[i].id + "}}", array[i].label);
}
alert(str);

只需循环遍历数组,并用所需标签替换字符串中的每个键。如果在字符串中找不到密钥,则replace根本不执行任何操作。

答案 1 :(得分:0)

如果您想要跟踪令牌位置,可以使用String.prototype.split拆分每个令牌,那么您不必关心索引。

var str = "The zoo has a panda named {{123}} that is colored {{234}}";
str.split(/\{\{(.+?)\}\}/g);

//["The zoo has a panda named ", "123", " that is colored ", "234", ""]

fiddle使用示例