js 正则学习小记之左最长规则

简介: 原文:js 正则学习小记之左最长规则昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'。其实我们的本意是想得到整个字符串 "nfa not" 的,可却只得到了 'nfa'。
原文: 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"

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

目录
相关文章
|
4月前
|
JavaScript 前端开发 Java
JS中的隐式类型转换规则
JavaScript 是一门弱类型语言,变量类型在运行时会进行隐式转换。本文总结了常见的隐式转换规则,包括运算符转换、等号比较和布尔值转换等。例如,`1 + {a: 1}` 会先调用对象的 `toString()` 方法,最终结果为 `'1[object Object]'`。此外,还详细解析了 `undefined` 和 `null` 的运算行为,以及 `![] == []` 等特殊情况。通过这些例子,帮助开发者更好地理解 JavaScript 中的类型转换机制。
JS中的隐式类型转换规则
|
5月前
|
Web App开发 JavaScript 前端开发
如何学习JavaScript?
如何学习JavaScript?
109 5
|
5月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
57 2
|
5月前
|
存储 JavaScript 前端开发
JavaScript学习第一章
本文档介绍了JavaScript的基础知识,包括其在网页中的作用、如何通过JavaScript动态设置HTML元素的CSS属性,以及JavaScript中的变量类型(`var`、`let`、`const`)和数据类型(基本数据类型与引用数据类型)。通过实例代码详细解释了JavaScript的核心概念,适合初学者入门学习。
82 1
|
6月前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
69 2
|
6月前
|
JavaScript
js学习--九宫格抽奖
js学习--九宫格抽奖
45 2
|
6月前
|
JavaScript
js学习--开屏弹窗
js学习--开屏弹窗
74 1
|
6月前
|
JavaScript
js学习--抽奖
js学习--抽奖
41 1
|
6月前
|
JavaScript
js学习--隔行换色
js学习--隔行换色
48 1
|
6月前
|
JavaScript 前端开发
JS隐式类型转换规则
【10月更文挑战第9天】 不同的 JavaScript 引擎可能在隐式类型转换的具体实现上存在一些细微差别。理解这些隐式类型转换规则对于正确处理数据和避免错误非常重要。
46 0