用数组元素替换字符串键

时间:2019-07-05 10:18:27

标签: javascript arrays node.js regex ecmascript-6

我有以下代码:

const chaine  =  'lorem {{name}} lorem lorem {{name}}..." ;

我需要用这样的数组元素替换所有{{name}}

cont list  = ['java', 'regex']  

所以预期的结果是

lorem java lorem lorem regex...

注意:

    字符串中的
  • {{name}}数字是变量
  • 数组元素长度为可变,我们可以有1..N

谢谢

4 个答案:

答案 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"]
));