Javascript 如何获得模板中使用的所有变量的列表?

Javascript 如何获得模板中使用的所有变量的列表?,javascript,nunjucks,Javascript,Nunjucks,有一种情况是,有许多模板使用不同的变量如何获取一个模板中所有变量名的列表,以便在渲染时准确传递模板所需的内容 我知道我可以使用正则表达式,但它并不像看起来那么容易实现。变量名周围的语法可能真的不同,我没有时间或资源查找每种可能的情况。考虑到以下最小的测试用例,正则表达式仍然可以工作: {{ name }} {{ name.child }} {{ name[child] }} {{ name["child"] }} {{ name_last["child"] }} {{ name1["child"

有一种情况是,有许多模板使用不同的变量如何获取一个模板中所有变量名的列表,以便在渲染时准确传递模板所需的内容


我知道我可以使用正则表达式,但它并不像看起来那么容易实现。变量名周围的语法可能真的不同,我没有时间或资源查找每种可能的情况。

考虑到以下最小的测试用例,正则表达式仍然可以工作:

{{ name }}
{{ name.child }}
{{ name[child] }}
{{ name["child"] }}
{{ name_last["child"] }}
{{ name1["child"] }}
{{ function() }}
{% if variable %}
因此,如果您想将其解析为pcre(即使问题被标记为我的理解是您想预解析页面),您可以:

  • 查找开头<代码>{{和结尾<代码>},可以选择用空格填充:
    {{\s?\s?}
  • 查找上下文短语的“头”:
    ([\w]+)
  • 用描述属性选择器的内容创建第二个非捕获组:
    ((?:\…+))(?:\[。+)?
剩下的是:
{\s?([\w]+)((?:\..+)(?:\[.+)\s?}
其第一个捕获组(
$1
)将匹配测试样本中的
名称
名称
名称1


.

NUNCUCKS模板变量不是由
{name}
包围的吗?如果你想捕获它,但排除所有的东西,比如函数调用,thta相对简单。你的模板变量名实际上是什么样子的?没错。但是变量并不总是像
{name}
。它可能是
{{name.child.sunder}}
{name[“child”]}
{name[i]}
和更多不同的表达式。我需要知道在渲染时传入的
上下文
对象的属性名称应该是什么。是的,但如果我们知道
{}中出现了什么内容
始终是候选项,而少数非候选项是函数调用(包含
()
),我们可以创建一个正则表达式来查找所有
{{}}
中没有
()
的函数调用。或者这还不够吗?如果有表达式
{name.child.granger}
我只需要提取
名称
部分。同样,for循环被封装为
{%for item in items%}
和if语句
{%if variable%}
。因此,是否有一种方法可以代替regexp使用nunjucks解析器?