js 正則學習小記之左最長規則

2021-09-06 15:27:17 字數 758 閱讀 7853

昨天我在判斷正則引擎用到的方法是用 /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"。

好吧,今天又是水文一篇,不過好歹學了一丁點新東西了。

js 正則學習小記之匹配字串字面量優化篇

昨天在 js 正則學習小記之匹配字串字面量 談到 是個不錯的表示式,因為可以滿足我們的要求,所以這個表示式可用,但不一定是最好的。從效能上來說,他非常糟糕,為什麼這麼說呢,因為 傳統型nfa引擎 遇到分支是從左往右匹配的,所以它會用 去匹配每乙個字元,發現不對後才用 去匹配。比如這樣乙個字串 123...

htaccess正則規則學習筆記整理

位於行首時表示注釋。f forbidden 禁止 命令伺服器返回 403forbidden錯誤給使用者瀏覽器 l last rule 最後一條規則 告訴伺服器在本條規則執行完後停止重寫url n next 下一條規則 告訴伺服器繼續重寫,指導所有重寫指令都執行過 g gone 丟失 命令伺服器返回4...

js學習筆記之正則

是為了提取匹配的字串。表示式中有幾個 就有幾個相應的匹配字串。s 表示連續空格的字串。是定義匹配的字元範圍。比如 a za z0 9 表示相應位置的字元要匹配英文本元和數字。s 表示空格或者 號。一般用來表示匹配的長度,比如 s 表示匹配三個空格,s表示匹配一到三個空格。0 9 a z a z 包含...