在Typescript中执行简单模板

qxsslcnc  于 2023-05-01  发布在  TypeScript
关注(0)|答案(1)|浏览(93)

我正在寻找一个非常简单的方法来做文本输入模板。我需要处理像大写,子字符串,修剪等简单的功能。我只是在处理短信。例如:
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()];
    });
  }

}
ojsjcaue

ojsjcaue1#

我觉得这比我想象的要复杂。需要像Parsing expression grammar这样的东西。有在线生成器可以用于这样的事情:https://pegjs.org/

相关问题