【Vue2.x 源码学习】第十三篇 - 生成 ast 语法树 - 正则说明
一,前言
上篇,主要介绍了 vue 数据渲染核心流程,涉及以下几个点:
Vue 核心渲染流程回顾
三种模板写法及优先级
两种数据挂载方式
Vue 的原型方法 $mount
compileToFunction -> parserHTM 流程说明
本篇,生成 ast 语法树-正则说明
二,模板解析
1,模板解析的说明
上文说到,compileToFunction 是 Vue 模板编译的入口:
复制代码
compileToFunction 主要做了以上两件事:
将模板变成 AST 语法树
使用 AST 生成 render 函数
而将 html 模板编译为 ast 语法树,就是用 js 对象的树形结构来描述 HTML 语法;
这里需要对 html 模板进行解析,而解析的方式就是使用正则不断进行匹配和处理;
2,模板的解析方式
使用正则对 html 模板进行顺序解析和处理
每处理完一段,就将处理完的这部分截取掉
就这样不停的进行解析和截取,直至将整个模板全部解析完毕
复制代码
可以使用 while 循环,对模板不停截取,直至全部解析完毕
复制代码
标签还是文本?
内容开头的第一个字符是否为尖角号 < :
如果是尖角号,说明是标签;如果不是尖角号,说明是文本
三,正则说明
1,Vue2 相关的正则
复制代码
2,匹配标签名
匹配标签名 aa-xxx
复制代码
正则解析
正则的开始和结尾被/包裹
\\-\\编译成\-\. (第一个\,\-是转译中划线-的;第二个\,\.是转译.的,)
测试匹配结果
复制代码
3,命名空间标签
命名空间标签:aa:aa-xxx
复制代码
正则解析
复制代码
4,匹配开始标签-开始部分
复制代码
5,匹配结束标签
复制代码
6,匹配属性
复制代码
7,匹配开始标签-闭合部分
复制代码
8,匹配 {{ }} 表达式
复制代码
四,结尾
又成功水了一篇,还剩 8 篇
本篇,主要介绍了生成 ast 语法树-正则说明部分,涉及以下几个点:
简要说明了 HTML 模板的解析方式
对模板解析相关正则说明和测试
下一篇,生成 ast 语法树-代码实现
评论