当前位置: 首页 > Web前端 > HTML

字符串解析的一点理解(以解析一段HTML字符串为例)

时间:2023-03-28 13:14:37 HTML

在解析一段字符串时,可以使用字符串的indexOf等方法,也可以使用正则表达式,但是如果需要解析的以下字符串:Text什么时候可能需要解析像这个字符串这样的字符?比如你可能想在nodejs环境下开发一个爬虫,分析爬取到的页面内容,或者像上面的设计,用html表达你想画什么样的图形,然后用js把用户的意图画在上面canvas等。接下来我们一步步看一下如何分析处理上述字符串中包含的信息。我们把分析分为这几个步骤:分析符号→分析词→分析词信息→获取整体信息label在这里,为了得到单词,首先需要分析的是一个符号。例如,对于“

Hello
”,有三个符号:“
”、“Hello”和“
”。因此,符号很容易分析,在此基础上,也很容易分析文字的存在。什么是符号取决于分析的内容和目的。以上内容,最终分析符号的结果为:例如第二个符号,原代码为"",经过分析,是一个label的开头部分,名称为arc,还有一些属性。那么,这样一个符号是如何分析的呢?很简单,就是用一个while循环。在分析一个符号之前,如果遇到的第一个非空白字符是“<”,则说明这是一个标签(可能是开始、结束或自闭),直到遇到“>”,分析结束,即即,得到一个符号。而如果在分析一个符号之前遇到的第一个非空白字符不是“<”,就说明这是一段文字。遇到“<”时,回退一步得到一段文字符号。对于标签符号,只要在分析时加入一些额外的判断,就可以获得更丰富的信息和属性值。这样,就得到了上面的符号列表。##分析单词基于上面的符号列表,我们来分析下面的单词列表:显然,单词明显少于符号。那么,如何通过符号列表得到单词列表呢?这将比上一步容易得多。首先,您读取符号列表中的第一个符号。如果是文本或者自闭标签,就已经拿到了第一个词,否则,一定是开始标签。现在,你把这个开始标签存入栈中(先进后出),并在单词列表中占据一个位置,然后观察下一个符号,如果是文本或者自闭标签,就是一个新单词,否则检查是否为起始标签,如果是,同流程,否则,判断是否匹配当前栈顶元素,如果匹配则出栈并完成一次单词匹配,否则抛出错误。如此重复,直到遍历完符号列表,此时观察堆栈,如果还有元素,可以默认自关闭。##词信息分析在上一步中,除了对词进行分析外,还需要对每个词进行额外的层标记(例如:根组为第一层,根的子组为第二层,等等在)。等级是如何获得的?比如你当前的层级是deep,如果你遇到的下一个符号是开始符号,那么下一个单词(或文本,下同)的层级是deep+1,如果遇到结束符号,则下一个一个词应该是deep-1,否则还是deep。获取整体信息是对一个字符串表达式进行求值,对一个json字符串获取一个JSON对象,这里是获取一个带有关系的DOM树。先看最终结果:我们取节点““例如。通过parentNode和childNodes,表明其父节点为第二个节点组,没有子节点,上一个兄弟preNode为null,下一个兄弟nextNode为4,为文本标签。同样,我们来谈谈想法。在词表中,取出一个词(其实是一个节点或者一个文本节点),如果下一个词的深度和当前的一样,就是兄弟关系,如果小一级,就是当前节点的子节点,比较容易。如果大于当前节点的深度怎么办?表示当前节点是叶子,需要回溯。回溯到deep与新节点deep相同,那么新节点就是这个节点的下一个兄弟,以此类推。总结以上解析html字符串的算法已经封装开源:parsexhtmlintojsonobjects