javascript - 如何从模板中提取车把列表?
问题描述
给定一个带有有效把手的字符串,例如"Handlebars <b>{{doesWhat}}</b>"
,我知道我可以使用它来编译它,Handlebars.compile
因此我可以doesWhat
使用以下代码注入一个变量:
const template = Handlebars.compile("Handlebars <b>{{doesWhat}}</b>");
const rendered = template({ doesWhat: "rocks!" });
// returns "Handlebars <b>rocks!</b>"
我想知道是否有办法提取库编译时检测到的所有把手的列表(不包括注释、助手或“语言”的其他功能)?会返回的东西:
['doesWhat']
解决方案
您应该匹配 和 内的任何"{{"
内容"}}"
。这不考虑诸如循环和中继器之类的事情。
我添加了向后看和向前看检查。请记住,旧版本的 JavaScript 不支持负向回溯。
Handlebars.registerHelper('loud', str => str.toUpperCase())
const EXPRESSION_PATTERN = /(?<=\{\{)[\{]?(.*?)[\}]?(?=\}\})/g
const extractExpressions = template => format.match(EXPRESSION_PATTERN)
let format = '{{name}} <b>{{loud does}}</b> my <b>{{thing.value}}</b>!'
let options = { name: 'Handlebars', does: 'rocks', thing: { value: 'socks' }}
let template = Handlebars.compile(format)
console.log(extractExpressions(template))
document.querySelector('#rendered').innerHTML = template(options)
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.6/handlebars.min.js"></script>
<div id="rendered"></div>
推荐阅读
- vba - Userform 将对数据进行编码并在 Microsoft Outlook 日历上创建约会
- java - 如何创建一个循环来添加这些盒子的所有卷?
- android - Android NDK 制作。数百个“未定义的参考错误”
- sql-server - SQL Server 2016 - 删除链接到旧完整备份的差异备份的维护计划
- sql-server - 在将 EF6 从 SQL Server 迁移到 Oracle 时。“Oracle Data Provider for .NET 不支持时间”得到这个问题
- r - 在 R 中随机采样不规则的栅格范围
- regex - 我需要一个正则表达式来提取分隔符之间的特定字符
- jenkins-pipeline - 如何在 Jenkins 管道中的 zip 文件管道实用程序插件中排除 Jenkinsfile 和自动化脚本
- uvm - 在模拟运行时更改 uvm 详细程度
- python - Pandas Dataframe 时移列