This repository has been archived by the owner on Apr 9, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 49
brix 的模板解析问题二次探讨 #41
Labels
Comments
用传统的编译原理来处理,而不是用正则。 |
@goto100 能不能举个例子? |
1 可以说brix创造了一个新的模板语言,同js、c不同,是一门描述语言,同xml、css类似; |
正则是一个解析字符串的手段了,编译原理与否是两条路线,草根路线,高端路线。 所以左莫继续快速推你的改进,同时多总结提纯需求,作为高端路线的输入,只要有合适资源就开始并行实施。。 |
用栈结构+正则匹配,正则匹配每次只匹配 一个 |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
上次的讨论在 #39
注释的写法很好的解决了子模板的匹配和提取,却留下了遗憾和不优雅。
在上次的分析中我们已经知道,我们需要的是从一段Html文本中找出特定标签的innerHTML,这里面最大的难点就是,Html标签是支持嵌套的,怎么能够找到指定标签相对应的闭合标签呢?
思路
我们可以这样想,先匹配最前面的起始标签,假设是div吧(<div),接着一旦遇到嵌套div,就“压入堆栈”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签。
之所以这样去思考,是因为正则里有“平衡组”这样的特性能够实现刚才说的“堆栈”操作(平衡组参见),可惜的是js里的正则不支持这样的特性。
回归原始
我们回到原始,不考虑嵌套,我们的正则应该这样写
夹杂在标签中的内容无非两种情况
然后就是这两种内容的不断重复而已。正则表示如下:
这样,我们就能获取最多嵌套一级的正则了
以此类推二级、三级
程序构建
所以实际上,只要你的html结构不是特别复杂的话,也就是说嵌套不会很深的话,那么你完全可以使用这种方式来匹配嵌套html标签,幸运的是,因为模板是用户传入的,在传入之前,我们其实就知道同一个标签的嵌套次数,那通过程序动态构建正则,我们也是能够实现无限级标签嵌套的获取,代码如下:
欢天喜地
现在,我们终于可以不用再写
更好的建议
你是否有更好的建议?
The text was updated successfully, but these errors were encountered: