JavaScript 正規表示式 前瞻 找位置

2021-09-06 12:24:56 字數 3609 閱讀 8287

js中全部都是順序環視

對於順序肯定環視(?=expression)來說,當子表示式expression匹配成功時,(?=expression)匹配成功,並報告(?=expression)匹配當前位置成功。

對於順序否定環視(?!expression)來說,當子表示式expression匹配成功時,(?!expression)匹配失敗;當子表示式expression匹配失敗時,(?!expression)匹配成功,並報告(?!expression)匹配當前位置成功;

順序肯定環視的例子已在nfa引擎匹配原理中講解過了,這裡再講解一下順序否定環視。

源字串:aaone

bbtwo

cc正規表示式:<(?!/?p\b)[^>]+>

這個正則的意義就是匹配除或

之外的其餘標籤。

匹配過程:

首先由字元「<」取得控制權,從位置0開始匹配,由於「<」匹配「a」失敗,在位置0處整個表示式匹配失敗,第一次迭代匹配失敗,正則引擎向前傳動,由位置1處開始嘗試第二次迭代匹配。

重複以上過程,直到位置2,「<」匹配「<」成功,控制權交給「(?!/?p\b)」;「(?!/?p\b)」子表示式取得控制權後,進行內部子表示式的匹配。首先由「/?」取得控制權,嘗試匹配「p」失敗,進行回溯,不匹配,控制權交給「p」;由「p」來嘗試匹配「p」,匹配成功,控制權交給「\b」;由「\b」來嘗試匹配位置4,匹配成功。此時子表示式匹配完成,「/?p\b」匹配成功,那麼環視表示式「(?!/?p\b)」就匹配失敗。在位置2處整個表示式匹配失敗,新一輪迭代匹配失敗,正則引擎向前傳動,由位置3處開始嘗試下一輪迭代匹配。

在位置8處也會遇到一輪「/?p\b」匹配「/p」成功,而導致環視表示式「(?!/?p\b)」匹配失敗,從而導致整個表示式匹配失敗的過程。

重複以上過程,直到位置14,「<」匹配「<」成功,控制權交給「(?!/?p\b)」;「/?」嘗試匹配「d」失敗,進行回溯,不匹配,控制權交給「p」;由「p」來嘗試匹配「d」,匹配失敗,已經沒有備選狀態可供回溯,匹配失敗。此時子表示式匹配完成,「/?p\b」匹配失敗,那麼環視表示式「(?!/?p\b)」就匹配成功。匹配的結果是位置15,然後控制權交給「[^>]+」;由「[^>]+」從位置15進行嘗試匹配,可以成功匹配到「div」,控制權交給「>」;由「>」來匹配「>」。

此時正規表示式匹配完成,報告匹配成功。匹配結果為「」,開始位置為14,結束位置為19。其中「<」匹配「<」,「(?!/?p\b)」匹配位置15,「[^>]+」匹配字串「div」,「>」匹配「>」。

前瞻相當於對「所在位置」附加了乙個條件,前瞻的難點在於找到這個「位置」

前瞻在字串左邊:就是從該字串前面的第乙個位置(包括字串)開始查詢符合該前瞻條件的字串。

前瞻在字串右邊:就是從該字串後面的第乙個位置(不包括字串)開始查詢符合該前瞻條件的字串。

前瞻在字串中間,就是

既要不包含前字串,

也要包含後字串,

再符合前瞻條件。

前瞻要包含cd,位置在cd左邊

2.前瞻在右邊

3.前瞻在中間,但是確定位置在左邊

4.前瞻在中間,但是確定位置在右邊

5.前瞻在中間,但是兩邊都沒有確定位置

6.前瞻在中間,但是兩邊都有確定位置

Javascript正規表示式

這段時間學習js,正好遇到了正規表示式。下面通過使用例項介紹一下正規表示式。正規表示式,又稱正規表示法 常規表示法 英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列符合某個句法規則的字串。在很多文字...

JavaScript 正規表示式

一 什麼是正規表示式 正規表示式 regular expression 是乙個描述字元模式的物件。測試正規表示式 regexp 物件包含兩個方法 test 和exec 功能基本相似,用於測試字串匹配。test 方法在字串中查詢是否存在指定的正規表示式並返回布林值,如果存在則返回true,不存 在則返...

javascript 正規表示式

正規表示式 regexp物件 主要用於表單驗證 1 建立正規表示式 1 var ret pattern pattern是內容,可以是正規表示式的內容,可以是字元或是其他的內容 2 var rag new regexp pattern 括號內可以是雙引號或者單引號 2 正規表示式的exec方法 reg...