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 正则学习小记之左最长规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你见过动物是怎么笑的吗?赶紧来看看【组图
- 下一篇: wp如何代码实现锁屏