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"

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

  • 相关阅读:
    001.Git简介与安装
    004.MySQL主库手动复制至从库
    001.MySQL高可用主从复制简介
    SQL Server之索引解析(一)
    设计模式之简单工厂模式
    设计模式之总体介绍
    .NET Framework与.NET Core
    【python opencv】二维直方图
    【python opencv】直方图均衡
    【python opencv】直方图查找、绘制和分析
  • 原文地址:https://www.cnblogs.com/52cik/p/js-regular-left-longest.html
Copyright © 2011-2022 走看看