9.3.2 截取开始标签
HTML解析器的全部逻辑都是在循环中执行,HITML解析器在循环中是如何截取以及识别到开始标签的。当HTML解析器解析到标签开始时,会触发钩子函数start,同时会给出 三 个参数,分 别 是标签名 (t a g N a m e )、 属性 (attrs) 以及自闭合标识 ( unary )。在分辨出模板以开始标签开始之后,需要将标签名、属性以及自闭合标识解析出来。开始标签分为三个部分:标签名、属性、结尾。
解析开始标签,使用正则,不仅仅是< 开头的解析标签属性:
这个正则表达式每次是能截取一个属性,如果截取完后, 剩下的HTML 模板依然符合标签属性的正则表达式,那么说明还有剩余的属性需要处理,此时就重复执行前面 的流程,直到剩余的模板不存在属性。解析前后的模板和数据:还有一类是自闭合标识,自闭合标签是没有子节点的。
截取结束标签,第一个字符一定是<,最后一个字符一定是>, 当分辨出结束标签后,需要做两件事,一个是截取模板,另一件事是触发钩子函数。
整个过程:先解析标签名,看模板是否符合开始标签的特征,然后循环解析标签属性,并且判断是否为自闭合标签。最终会返回tagName、attrs和unary 数据,作为参数传给handlestartTag这个钩子。
HTML解析器的全部逻辑都是在循环中执行,HITML解析器在循环中是如何截取以及识别到开始标签的。当HTML解析器解析到标签开始时,会触发钩子函数start,同时会给出 三 个参数,分 别 是标签名 (t a g N a m e )、 属性 (attrs) 以及自闭合标识 ( unary )。在分辨出模板以开始标签开始之后,需要将标签名、属性以及自闭合标识解析出来。开始标签分为三个部分:标签名、属性、结尾。
解析开始标签,使用正则,不仅仅是< 开头的解析标签属性:
这个正则表达式每次是能截取一个属性,如果截取完后, 剩下的HTML 模板依然符合标签属性的正则表达式,那么说明还有剩余的属性需要处理,此时就重复执行前面 的流程,直到剩余的模板不存在属性。解析前后的模板和数据:还有一类是自闭合标识,自闭合标签是没有子节点的。
截取结束标签,第一个字符一定是<,最后一个字符一定是>, 当分辨出结束标签后,需要做两件事,一个是截取模板,另一件事是触发钩子函数。
整个过程:先解析标签名,看模板是否符合开始标签的特征,然后循环解析标签属性,并且判断是否为自闭合标签。最终会返回tagName、attrs和unary 数据,作为参数传给handlestartTag这个钩子。









