zoukankan      html  css  js  c++  java
  • js 正则学习小记之左最长规则

    昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'
    其实我们的本意是想得到整个字符串 "nfa not" 的,可却只得到了 'nfa'

    再来看个例子,/an (nfa)?(nfa test)?/ 去匹配 "an nfa test",如果和上面一样的解释,那应该只得到 'an nfa'
    接着第一个捕获组里是 'nfa' 第二个捕获组里是空。

    我们的本意是尽量多的去匹配所有字符串,可是得到的却是 'an nfa' 这不是我们期望的结果,为什么它不去匹配第二个呢?
    因为传统型NFA引擎遵循的原则是从左到右按顺序去匹配,满足要求就停止。
    多分支表达式 /nfa|nfa not/ 在 nfa 匹配成功的时候,就不会去继续匹配第二个表达式了。
    捕获组也是一样,当 (nfa)? 表达式匹配成功,就保存当前匹配状态,只会接下去匹配 'an nfa' 后面的部分,而不会回到 'an ' 这里重新匹配一下表达式。

    所以 左最长规则 的意思就是把你希望得到的最长的那个表达式写在左边,这样他就会按顺序匹配到我们期望的内容了。
    /nfa not|nfa/ 去匹配 "nfa not",用 /an (nfa test)?(nfa)?/ 去匹配 "an nfa test"

    好吧,今天又是水文一篇,不过好歹学了一丁点新东西了。

  • 相关阅读:
    Spring-Cloud-GateWay
    Spring-Clould-Alibaba-sentinel控制台
    Oacle学习-01Oracle的安装
    Spring-Clould-Alibaba-集成Ribbon&Feign
    Spring-Clould-Alibaba-nginx-nacos集群搭建
    Springboot整合Security
    Springboot实现QQ邮箱的发送
    java实现qq邮箱的发送
    Springboot集成Swagger2
    Hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/52cik/p/js-regular-left-longest.html
Copyright © 2011-2022 走看看