美文网首页
JS 正则表达式实例

JS 正则表达式实例

作者: 377b79b94683 | 来源:发表于2017-07-14 18:53 被阅读4次
心得向文章,不对基础概念作解释

JS的正则引擎使用的是NFA引擎

正则字符串组成,每个字符占据一个宽度

匹配机制:

  • 从位置0开始,按照表达式的单个子表达式规则来进行匹配
  • 匹配在表达式和字符串均被匹配完毕后结束匹配
  • 如果字符串已匹配完毕而表达式并未匹配完毕,则需要考虑回溯,如果回溯失败,则本次匹配失败
  • 如果字符串未匹配完毕而表达式已经匹配完毕,则在表达式匹配完毕后提交一次匹配结果,然后重新读取表达式,从上次提交结果的位置继续匹配
  • 环视,环视会从前一个子表达式结束的位置开始按照环视表达式进行匹配,如果匹配失败,行为和一般匹配规则相同;如果匹配成功,环视并不会拥有字符,也不会控制表达式的匹配位置。在环视表达式之后的新的表达式,会从环视表达式前的表达式结束的位置开始匹配(和环视表达式同一个起点位置)


    环视表达式会进行匹配,如第二条即匹配失败因为aa后面的位置无法匹配到aaa字符串,而且无法回溯,因此匹配失败;而第一条的环视表达式则可以匹配成功,因为可以在aa后匹配到环视表达式的值,但是,环视表达式不会拥有这些字符和位置,所以环视表达式后的表达式应该匹配aa后面的b,而非bcdd(环视表达式)后的e
  • 对于星号谨慎使用, 因为在极端情况下,星号被回溯为0的时候,虽然没有指定的结果,但可以通过任何值的匹配!


    谨慎使用星号符号对字符进行匹配,虽然返回的结果没有表达式中指定的值,但是实际上,结果中的每次匹配都是被通过了的!在一些地方,会让人感到疑惑
  • 正则表达式并非按照单个字符进行匹配,而是按照位置来进行匹配
  • 当某表达式控制了若干字符之后,位置指针会移动到被控制字符的后面一个位置,作为下个子表达式匹配的起点
  • 当发生回溯的时候,并非回溯到前一个子表达式的地方,而是有多少回溯多少,直到所有的结果都被回溯完毕,仍未匹配成功,则匹配失败

相关文章

网友评论

      本文标题:JS 正则表达式实例

      本文链接:https://www.haomeiwen.com/subject/augnhxtx.html