我有以下代码:
const chaine = 'lorem {{name}} lorem lorem {{name}}..." ;
我需要用这样的数组元素替换所有{{name}}
cont list = ['java', 'regex']
所以预期的结果是
lorem java lorem lorem regex...
注意:
谢谢
答案 0 :(得分:4)
您可以寻找替换值并从list
中获取商品。
var string = 'lorem {{name}} lorem lorem {{name}}...',
list = ['java', 'regex'],
result = string.replace(/\{\{name\}\}/g, (i => _ => list[i++])(0));
console.log(result);
通过为索引的每个属性获取一个对象和一个属性,来获得更高级的版本。
var string = 'lorem {{name}} lorem lorem {{name}}, {{foo}}...',
replacements = { name: ['java', 'regex'], foo: ['bar'] },
result = string.replace(/\{\{([^}]+)\}\}/g, (_, key) => {
if (!(key in replacements)) return key;
replacements['_' + key] = replacements['_' + key] || 0;
return replacements[key][replacements['_' + key]++];
});
console.log(result);
答案 1 :(得分:2)
您可以使用.replace()
使它起作用。
演示:
const chaine = "lorem {{name}} lorem lorem {{name}}..." ;
const list = ['java', 'regex'];
var result = chaine.replace(/\{\{name\}\}/g, function(text) {
return list.shift();
});
console.log(result);
答案 2 :(得分:2)
const chaine = 'lorem {{name}} lorem lorem {{name}}...';
const list = ['java', 'regex'];
const textWithEverythingReplaced = list.reduce((textWithReplacedValues, wordToReplaceItWith) => {
return textWithReplacedValues.replace("{{name}}", wordToReplaceItWith)
}, chaine);
console.log(textWithEverythingReplaced);
尽管此代码可以工作,但该算法并不可靠。如果您的{{name}}
多于replacers
,它将断开。
除非您可以验证{{name}}
与list.length
相等的事实,否则应该没事。
答案 3 :(得分:1)
看到您希望它是通用的,将它变成可重用的函数也很有意义。下面是一个示例。
const repFn = (str, arr) => {
let i = 0;
return str.replace(/{{name}}/g, x =>arr[i ++]);
}
const chaine = "lorem {{name}} lorem lorem {{name}}..." ;
const list = ['java', 'regex'];
console.log(repFn(chaine, list));
console.log(
repFn("{{name}}, a few {{name}} can {{name}} up the {{name}} of a thousand",
["Sometimes", "words", "sum", "wisdom"]
));