我正在寻找一个非常简单的方法来做文本输入模板。我需要处理像大写,子字符串,修剪等简单的功能。我只是在处理短信。例如:Hello {{profile.name}}, the following date {{formatDate(event.date, 'dd.mm.yyyy')}} is free.
我想象着这样称呼它:
TemplateEngine.render(
'Hello {{profile.name}}, the following date {{formatDate(event.date, 'dd.mm.yyyy')}} is free.',
{
profile: { name: 'Tom' },
event: { date: 1682349765 }
},
{
formatDate: (input, format) => moment(input).format(format)
});
我目前的方法只适用于非嵌套数据,不适用于函数。它变得越来越复杂,所以我现在的问题是:有人知道如何完成类似的事情,但与这些功能?
我已经看过handlebarsjs了,但对于我想做的事情来说,这似乎是矫枉过正。最好的情况是完全没有外部依赖。
export class TemplateEngine {
public static render(template, data, functions) {
return template.replace(/{{(.*?)}}/g, (match) => {
return data[match.split(/{{|}}/).filter(Boolean)[0].trim()];
});
}
}
1条答案
按热度按时间ojsjcaue1#
我觉得这比我想象的要复杂。需要像
Parsing expression grammar
这样的东西。有在线生成器可以用于这样的事情:https://pegjs.org/