js 正则学习小记之左最长规则
原文: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"。

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

posted on 2014-05-10 19:17 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3720881.html

js 正则学习小记之左最长规则相关推荐

  1. js 正则学习小记之匹配字符串

    原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...

  2. 正则学习小记----1

    正则表达式 1. 基础知识 正则表达式是用于匹配字符串组合模式(增删改查),在js中表达式也是对象 拥有宿主环境才能运行 2. 示例展示 两种不同的表现形式 let hd = "dfsdfs ...

  3. js 正则练习之语法高亮

    js 正则练习之语法高亮 原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解. 今天就分析下 次碳酸钴 和 Barret ...

  4. 浅谈 js 正则字面量 与 new RegExp 执行效率

    前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化篇>. 里面讲到了优化正则起到提升性能的问题,但是能提升多少 ...

  5. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  6. js 正则中冒号代表什么_JS正则表达式一条龙讲解(从原理和语法到JS正则)

    正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路:正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,总能帮你一眼识别:正则啊,就像一个手电筒,在你需要找什么玩意的时候 ...

  7. js快速学习思维导图

    Js给初学者的印象总是那么的"杂而乱",相信很多初学者都在找轻松学习Js的途径.在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条"轻松学习Js之路&qu ...

  8. Ext JS 6学习文档-第3章-基础组件

    Ext JS 6学习文档-第3章-基础组件 基础组件 在本章中,你将学习到一些 Ext JS 基础组件的使用.同时我们会结合所学创建一个小项目.这一章我们将学习以下知识点: 熟悉基本的组件 – 按钮, ...

  9. js/jquery学习笔记

    javascript简介 JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言. 不同于服务器端脚本语言,例如PHP与ASP,JavaScript是客户端脚本语言,也就是说Ja ...

最新文章

  1. tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。...
  2. Leetcode 74. 搜索二维矩阵 (每日一题 20210907)
  3. 成功解决RuntimeError: Java is not installed, or the Java executable is not on system path
  4. 设计模式--解析器(Interpreter)模式
  5. 我在神策做研发 | 成长中的成都研发中心
  6. UVa 489 Hangman Judge
  7. 3. HTML中的容器标签
  8. 阿里云上Kubernetes集群联邦
  9. autocomplete触发事件_修改jQuery.autocomplete中遇到的键盘事件
  10. 深度学习笔记 —— 卷积层
  11. Gym 100015 F Fighting for Triangles 博弈,状压dp
  12. 场景式营销——新商业时代的生存法则
  13. killall为什么有时候会找不到进程?
  14. 基于微信小程序的游戏账号交易小程序
  15. 印象笔记无法连接服务器解决办法
  16. V-SLAM重读(3):SVO代码阅读和调试修改
  17. WebDAV之葫芦儿•派盘+Obsidian笔记
  18. 智能车跟随圆弧路径原理
  19. 通过LRC文件分析出一首歌曲的速度
  20. git与Coding仓库代码创建

热门文章

  1. 计算机界名人榜-----约翰·冯·诺依曼
  2. 手写简版spring --5--资源加载器解析文件注册对象
  3. rabbitMq自动创建队列
  4. STM32F4 HAL库开发 -- GPIO
  5. Gradle不匹配报错的终极大招(gradle插件版本和gradle版本对应关系)
  6. iviewui php,Vue UI框架对比:Element UI、Ant Design Vue、iView
  7. sir跟seir模型有啥区别_H3C B5mini拆机,看一下跟B5有啥区别
  8. python画一片树叶_python画一片绿叶给你
  9. 合法的python变量名import_python 环境变量和import模块导入方法(详解)
  10. java求职_Java 求职怎么积累知识才可以找到工作