正規表示式分組詳解

admin發表於2018-08-19

分組是正規表示式中最為重要概念之一,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
(ant){2}

上述程式碼中,(ant)就是分組,它由一對小括號生成。

在JavaScript中,小括號是分組運算子,程式語言都是相通的,在正則中也大致如此。

正規表示式中的分組,可以將小括號中的內容作為一個獨立整體處理。

關於分組運算子可以參閱JavaScript 小括號()分組運算子一章節。

一.正則表示分組的必須要性:

如果我們要匹配三個字元"w",可以使用如下程式碼:

[JavaScript] 純文字檢視 複製程式碼
var str="本站url地址是www.softwhy.com"; 
var reg=/w{3}/g;
console.log(str.match(reg));

谷歌控制檯程式碼執行截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/19/014428nr58lr8ab985zja5.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼很完美的實現了匹配效果,再來看一段程式碼:

[JavaScript] 純文字檢視 複製程式碼
var str="本站url地址是www.softwhwhy.com"; 
var reg=/wh{2}/g;
console.log(str.match(reg));

我們的本意是想匹配重複兩次"wh",也就是字串"whwh"。

然而在谷歌控制檯執行結果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/19/014624e7saaqorotfqtrsz.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

匹配失敗了,因為上述正規表示式真正會匹配到的字串是"whh",只會重複"h"兩次。

這時候,正規表示式分組的作用就體現出來了,上述程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼
var str="本站url地址是www.softwhwhy.com"; 
var reg=/(wh){2}/g;
console.log(str.match(reg));

谷歌控制檯程式碼執行截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/19/014741f81mpm37im10313z.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

分組運算子會將"wh"作為一個獨立的單元處理。

二.正規表示式分組的作用:

正規表示式中由小括號構成的分組要比JavaScript中的小括號功能更為強大一些,下面分別做一下介紹。

(1).分組功能:這是小括號最基礎的功能,與JavaScript中的小括號作用相同,作用就是分組,那麼小括號中的內容就可以被看做一個整體進行處理,比如前面可以使用重複量詞,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
var str="本站url地址是www.softwhy.com"; 
var reg=/o(ft)?/g;
console.log(str.match(reg));

谷歌控制檯程式碼執行截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/19/014831vdoxyayweamyyyab.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

"ft"被看做一個整體,由於使用量詞?,所以匹配中可以包含"ft"也可以不包含。

(2).引用型分組:由於篇幅問題,具體參閱正規表示式引用型分組一章節。

(3).非引用型分組:由於篇幅問題,具體參閱正規表示式非引用型分組一章節。

相關文章