Javascript自定义模板引擎
我正在尝试用javascript创建一个自定义模板引擎,但在开始时遇到了问题,因为我无法使用正则表达式提取令牌。 以下是要求:Javascript自定义模板引擎,javascript,node.js,Javascript,Node.js,我正在尝试用javascript创建一个自定义模板引擎,但在开始时遇到了问题,因为我无法使用正则表达式提取令牌。 以下是要求: 变量的定义如下:$(变量) 函数:$(名称arg1“这是arg2,但它包含空格。”) 函数参数可以包含其他变量$(name$(variable)arg2) 变量和函数都将呈现为异步。例如:从db获取$(变量)的值,然后替换它 这不是为了呈现html页面,而是为了简单地替换用户在后端输入的字符串 编辑 更多信息: 假设用户输入以下字符串: $(id$(小写约翰)) 在后端
$(变量)
$(名称arg1“这是arg2,但它包含空格。”)
$(name$(variable)arg2)
$(变量)
的值,然后替换它
这不是为了呈现html页面,而是为了简单地替换用户在后端输入的字符串
编辑
更多信息:假设用户输入以下字符串:
$(id$(小写约翰))
在后端应用程序上,必须执行以下操作:
$(#name)$(variable)“这是arg2,但它包含空格。”$(/name)
而且它不支持异步呈现。。此正则表达式将标识可以替换的模板。请注意,它仅选择嵌套模板中最内层的模板
/\$\((?<FirstTerm>\S+?)(?<OtherTerms>(?:\s+(?:\w+|".*?"))+)?\)/g
/\$\((?\S+)(?(?:\S+(?:\w++“*?”)+)/g
所以,只要递归地使用正则表达式替换函数和模板逻辑,直到不再有匹配项为止。内部模板将被替换,剩下的字符串将替换模板
如果没有,你知道如何实施吗
您应该使用抽象语法树,并编写兼容的解析器。虽然正则表达式(如Pedro Lima所述)适合于简单的模板化,但如果您想要扩展解析器,则需要一些更健壮的东西
作为抽象语法树解析器的示例,$(test1$(test2)test3)lorem ipsum$(test4)
将转换为以下内容:
(感谢Mile Shang的树生成器。)
至于具体如何编写解析器,我认为您可以理解。只需迭代字符串并检查模板分隔符。阅读模板库(如Handlebar)的源代码可能会有所帮助。本文中的其他答案是正确的,但是,我想与大家分享我是如何实现这一点的:
这个问题需要更多的关注。花点时间阅读该页面上的链接和其他链接。模板文字在这种情况下不起作用。我要替换的字符串是由用户输入的,用户将遵循关于如何定义变量或函数的指定要求。为什么不能使用Regex提取令牌?似乎
/\$\(.++\)/
可以很好地工作。@MattF。这个正则表达式还匹配变量之间的文本,除非我遗漏了什么:它不能正常工作。请尝试-它不会选择包含其他模板的模板。这是一个很好的尝试,但我意识到正则表达式是错误的方法。@MattF。不,我说过不会的。我会改进我的答案。1秒钟哦,我误解了。在这种情况下,我认为这是正确的方法。