正則 分組 捕獲 總

2022-02-01 23:33:25 字數 2401 閱讀 6866

分組/捕獲

魔芋:01,小括號(又稱為圓括號)會產生子表示式(又稱為分組,子串)。可以在正則中\1,\2來引用子表示式匹配的文字值。

這些子表示式會被臨時緩衝區快取起來。所捕獲的每個子匹配都按照在正規表示式模式中從左到右出現的順序儲存。

緩衝區編號從 1 開始,最多可儲存 99 個捕獲的子表示式。每個緩衝區都可以使用

'\n' 

訪問,其中 n 為乙個標識特定緩衝區的一位或兩位十進位制數。如\1,\2。

n又稱為分組號。

好處,可以不用重複查詢某個匹配項。

這種方式,又稱為反向引用。

這種又稱為捕獲分組。

02,用(?:n)可以消除小括號產生子表示式的效果。

03,可以使用非捕獲元字元 '?:'、'?=' 或 '?!' 來重寫捕獲,忽略對相關匹配的儲存。

叫做:**先行的匹配。

又叫做:非捕獲組(non-capturing)

|

選擇,匹配的是該符號左邊的子表示式或右邊的子表示式。

捕獲(exp)

用小圓括號進行分組,如日期中年月日的分組:/(\d)-(\d)-(\d)/

每個分組將產生分組號,從第乙個括號開始,可以使用\n的形式在正則中使用分組號。

如匹配成對出現的html標籤,可以寫成://。

可以記住和這個組合相匹配的字串以供此後的引用使用。

(?:exp)

匹配exp正則,但不產生分組號,不記憶與該組匹配的字元

(?exp)

匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)

零寬斷言:

exp1(?=exp2)

前瞻斷言,匹配exp1,但後面必須是exp2。又稱為先行斷言

。零寬度正**先行斷言

如匹配名字叫xianlie,但不姓zhao的人:/zhao(?=xianlie)/

exp1(?!=exp2)

後瞻斷言,匹配exp1,但後面不能是exp2。又稱為

負向先行斷言。先行否定斷言。

如匹配姓zhao,但名字不叫xianlie的人:/zhao(?!xianlie)/

比如\b\w+(?=ing\b)

,匹配以ing結尾的單詞的前面部分(除了ing以外的部分)

,如查詢

i'm singing while you're dancing.

時,它會匹配

sing

和danc

(?來自es7。

後行斷言:與」先行斷言」相反, x只有在y後面才匹配,必須寫成/(?<=y)x/。解釋:找乙個x,那個x的前面要有y。

又叫做:零寬度正回顧後發斷言

比如(?<=\bre)\w+\b

會匹配以re開頭的單詞的後半部分(除了re以外的部分)

,例如在查詢

reading a book

時,它匹配

ading

(?來自es7。

後行否定斷言: 與」先行否定斷言「相反,x只有不在y後面才匹配,必須寫成/(?可以看出,後行斷言先匹配/(?<=y)x/的x,然後再回到左邊,匹配y的部分,即先右後左」的執行順序。

又叫做:零寬度負**先行斷言

例如:\d(?!\d)

匹配三位數字,而且這三位數字的後面不能是數字

;\b((?!abc)\w)+\b

匹配不包含連續字串abc的單詞。(?

匹配前面不是小寫字母的七位數字

\n

和第n個分組第一次匹配的字元相匹配,組是圓括號的子表示式(也有可能是巢狀的),組索引是從左到右的左括號數,「(?:形式的分組不編碼

?=n

匹配任何其後緊接指定字串 n 的字串。

?!n

匹配任何其後沒有緊接指定字串 n 的字串。 

(魔芋:就是乙個附加條件,匹配帶有什麼字串的才能匹配)

?!就是不能帶有什麼字串的。

什麼是斷言?

斷言用來宣告乙個應該為真的事實。

名詞解釋:

前瞻 = 先行斷言 

(?=) 正向前瞻 = 正向零寬先行斷言 

(?!) 反向前瞻 = 負向前瞻 = 負向零寬先行斷言

後顧 = 後發斷言 

(?<=) 正向後顧 = 正向零寬後發斷言 

(?**

JS 正則中的命名捕獲分組

假設你在一段陌生的 中看到這樣乙個函式 function tolocaldate date d d 2 1 3 單看這個函式你能知道它是想把 日 月 年 替換成 月 日 年 還是反過來?匿名捕獲分組沒法做到這一點,那就該命名捕獲分組上場了 function tolocaldate date d d ...

正規表示式之捕獲型分組與非捕獲型分組

使用小括號指定乙個子表示式後,匹配這個子表示式的文字 也就是此分組捕獲的內容 可以在表示式或其它程式中作進一步的處理。捕獲組 語法 字元 描述 示例 pattern 匹配pattern並捕獲結果,自動設定組號。abc d 匹配abcd或者abcabcd pattern 或 name pattern ...

正規表示式 分組與捕獲

之前使用正規表示式的時候大多數狀況下只是用用匹配表示式,為什麼說是匹配表示式呢,因為其實替換文字也可以使用表示式,我稱之為替換表示式。因為通常使用正規表示式的大多會是以下情況,比如把一段文字中的a字串更改為b字串 待匹配文字 abcdabcd 匹配表示式 b 替換文字 e 替換結果 aecdaecd...