我试图查看在这种情况下array.reduce是否会是一个更好的选择。 我想返回字符串结果,而不必在forEach循环中设置一个变量。
所以我在做什么,看是否在匹配我的正则表达式的字符串中有任何匹配项。然后将文本放入匹配项中,并用一个变量替换它。一切都很好,但是我想清理一下。 findReplaceTemplateString是一个单独的函数,我可以接受。它的forEach感觉就像我可以使用reducer来返回完成的字符串。但是我是减速机的新手,不知道这是否合适。任何人对此都有任何想法。
const reg = /\{.+?\}/g;
const matches = tpl.match(reg);
let str = '';
matches.map(item => item.slice(1, -1)).forEach((placeHolder) => {
str = findReplace(tpl, placeHolder, props[placeHolder] || '');
});
答案 0 :(得分:3)
我看不出过于复杂的意义。只需将String.prototype.replace()
与函数一起用作第二个参数。这将用有效参数动态替换您的模式。
const input = 'Hi there, {name}! What are you doing in {city}?';
const props = {name: 'Alex', city: 'St Petersburg'};
const output = input.replace(/\{.+?\}/g, (p) => {
return props[p.slice(1, -1)] || p /* here you may use '' */;
});
console.log( output );