相反的Javascript模板语言
Javascript templating language in reverse
有没有类似于模板引擎(la Mustache.js)的东西可以在"反向"中进行模板化?
这意味着我提供了渲染的html和一个模板文件,通过引擎运行它,并从中获取数据(比如JSON结构)。
我意识到这是一种可以用"屏幕抓取库"来完成的事情,但我从未见过使用胡子风格模板(无论这些模板叫什么)的屏幕抓取库。
不存在通用解决方案。例如,您永远无法反转以下模板:{{foo}}{{bar}},因为无法找到第一个胡子停止和第二个胡子开始的位置。
例如:
html: 'hello world!'
template: '{{foo}}{{bar}}'
model: {
foo: '',
bar: 'hello world!'
}
model2: {
foo: 'hello world!',
bar: ''
}
model和model2都从模板中呈现完全相同的html,因此它们都是有效的反转。
但是,如果您为模板制定一些规则,就有可能做到这一点而不会产生歧义。
规则:
- 两个胡子永远不能碰(如上所述)
- 胡子内容的开头永远不能与胡子后面的第一个文本部分相同(或者我们找不到胡子的结尾)
- 节中的第一个文本部分不能与节后的第一个文字部分相同(或者我们找不到节的末尾)
- 最好不要使用richtext{{}}胡子(允许它包含任何内容,因此反向匹配意味着它可以匹配文档的其余部分)
这些规则似乎对明文有很大的限制,但对于xml和html,它们运行得很好(如果您只对元素和属性内容感兴趣)。例如,如果只使用明文{{}}胡子,则规则二永远不会成为问题。
以下模板可以在没有任何歧义的情况下反转,例如:
<div>
<p>{{title}}</p>
<ul>
{{#list}}
<li>{{item}}</li>
{{/list}}
</ul>
</div>
但是添加另一个<李>就在<ul>将使模板不明确(规则3)。
我还没有在网上找到任何可以做到这一点的代码,所以我已经开始为此编写一个库。但到目前为止,它还没有完成,每次我研究它时,我都会发现新的局限性。只有对于非常简单的模板,这还可以(我只允许使用{{}}}、{{#}}和{{/}}胡子)。
我使用另一个模板系统找到了一个解决方案:https://github.com/fabiomcosta/mootools-meio-template/tree/master.它似乎也有同样的局限性。
一个很好的功能是,你可以添加更多的模板,它会并行检查所有模板,并选择一个可以提取最多字段的模板。
输出是JSON格式的,字段可以选择性地格式化为数字、日期、地址、嵌套甚至表格格式。
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 我想在Javascript中探索类似C语言的字符串的整个字符
- 为现有Roslyn语言lexer/parser选择基于javascript的代码编辑器
- Javascript/jQuery替换tamil语言输入框中的最后一个单词
- Porting duff's设备从C语言转换为JavaScript
- 我可以用JavaScript判断访问者是否'的语言环境遵循美国风格或世界其他地区's风格
- TinyMCE使用Javascript动态更改语言
- JavaScript 和其他使用松散定义的变量的语言
- 如何通过JavaScript正则表达式匹配不同语言中的单词
- V8 javascript 引擎是否将所有 javascript 编译为机器语言
- V8 JavaScript 引擎实现语言
- 使用JavaScript自动更改键盘语言,没有IE就不起作用
- 是否有一种功能齐全的范式语言可以转换为JavaScript
- 静态多语言javascript重定向保持重新加载页面
- 如何使用客户端语言(JavaScript)在SharePoint中编写/修改xml文件
- & lt;脚本语言=“JavaScript"祝辞添加
- 检测用户输入语言javascript
- 语言=“javascript"与类型=“文本/ javascript"
- 如何保护从其他语言(javascript)调用的java中的方法签名
- 多语言javascript应用程序的不同方法是什么?