心得向文章,不对基础概念作解释
JS的正则引擎使用的是NFA引擎
匹配机制:
- 从位置0开始,按照表达式的单个子表达式规则来进行匹配
- 匹配在表达式和字符串均被匹配完毕后结束匹配
- 如果字符串已匹配完毕而表达式并未匹配完毕,则需要考虑回溯,如果回溯失败,则本次匹配失败
- 如果字符串未匹配完毕而表达式已经匹配完毕,则在表达式匹配完毕后提交一次匹配结果,然后重新读取表达式,从上次提交结果的位置继续匹配
-
环视,环视会从前一个子表达式结束的位置开始按照环视表达式进行匹配,如果匹配失败,行为和一般匹配规则相同;如果匹配成功,环视并不会拥有字符,也不会控制表达式的匹配位置。在环视表达式之后的新的表达式,会从环视表达式前的表达式结束的位置开始匹配(和环视表达式同一个起点位置)
-
对于星号谨慎使用, 因为在极端情况下,星号被回溯为0的时候,虽然没有指定的结果,但可以通过任何值的匹配!
- 正则表达式并非按照单个字符进行匹配,而是按照位置来进行匹配
- 当某表达式控制了若干字符之后,位置指针会移动到被控制字符的后面一个位置,作为下个子表达式匹配的起点
- 当发生回溯的时候,并非回溯到前一个子表达式的地方,而是有多少回溯多少,直到所有的结果都被回溯完毕,仍未匹配成功,则匹配失败