正則表達(dá)式分組實(shí)例詳解
正則表達(dá)式分組:
如果想匹配3個數(shù)字,正則表達(dá)式可以用如下寫法:
\d{3}
以上代碼使用重復(fù)量詞可以匹配3位數(shù)字。
但是在實(shí)際應(yīng)用中,往往需要重復(fù)多個字符,例如我想重復(fù)ab兩個字符,使用以下代碼就不合適了,代碼如下:
ab{3}
以上正則表達(dá)式只能夠重復(fù)3次b。
為了實(shí)現(xiàn)重復(fù)多個字符可以使用小括號來指定子表達(dá)式或者說分組來實(shí)現(xiàn)此功能,例如:
(ab){3}
上面的正則就可以重復(fù)ab了。
所謂的分組就是使用小括號將一些項(xiàng)包括起來,使其成為獨(dú)立的邏輯域,那么就可以像處理一個獨(dú)立單元一樣去處理小括號的內(nèi)容。
下面看一段代碼實(shí)例:
(\d{1,3}\.){3}\d{1,3}
上面是一個簡單的ip匹配正則表達(dá)式。由小括號包裹的內(nèi)容會被作為一個獨(dú)立的邏輯域進(jìn)行操作。
分組的作用:
在正則表達(dá)式中,分組具有舉足輕重的作用,下面就簡單對它的功能做一下簡單的介紹。
一.起到原始的分組作用:
把單獨(dú)的項(xiàng)目進(jìn)行分組,以便合成子表達(dá)式,這樣就可以像處理一個單獨(dú)的字符那樣,對其應(yīng)用|、+、*或者?等元字符來操作它們。
實(shí)例代碼如下:
var str="I love javascript and java"; console.log(str.match(/java(script)?/gi));
由以上代碼的運(yùn)行結(jié)果可以看出,正則表達(dá)式既可以匹配字符串javascript也可以匹配java,這是因在正則表達(dá)式中采用了分組,并且使用重復(fù)量詞?,可以使前面的子表達(dá)式重復(fù)0次或者1次。
二.定義子模式:
分組另一個非常重要的作用就是在完整的模式中定義子模式。
當(dāng)一個正則表達(dá)式成功的和目標(biāo)字符串相匹配時,可以從目標(biāo)字符串中抽出和小括號中字表達(dá)式相匹配的部分。
假如我們匹配的是以一個數(shù)字開頭的后面跟著一個或者多個不區(qū)分大小寫的字母的字符串,正則表達(dá)式可以這樣寫:
/\d[a-zA-Z]+/
假如我們真正關(guān)心和需要的是開頭的數(shù)字,那么就可以將正則表達(dá)式的數(shù)字部分放入小括號就可以從檢索到的匹配中抽取數(shù)字.
/(\d)[a-zA-Z]+/
三.引用子表達(dá)式:
正則表達(dá)語法中可以在同一個表達(dá)式中的后部引用前面的子表達(dá)式。這是通過在"\"后面跟隨數(shù)字實(shí)現(xiàn)的。此數(shù)字指定了小括號字表達(dá)式在正則表達(dá)式中的位置,例如\1是引用的第一個帶有圓括號的子表達(dá)式,自然\2就是第二個帶有圓括號的子表達(dá)式。
特別注意:由于子表達(dá)式是可以相互嵌套的,那么計算子表達(dá)式的位置的時候,只要確定左括號的位置即可。例如:
/(java(script))/
在以上正則表達(dá)式中,嵌套的子表示是可以用\2表示。
對于子表達(dá)式的引用,并不是引用的匹配模式,而是對子表示匹配內(nèi)容的引用。一般來說對子表達(dá)式的引用一般是用來實(shí)施一條約束,看下面的代碼:
/(['"])[^'"]*\1/
通常情況下左右引號是相匹配的,如果前面是雙引號,那么結(jié)尾也要是雙引號,前面是單引號那么結(jié)尾也必須是單引號,并且字符串中間不能夠再出現(xiàn)其他的引號,例如:
"腳本之家歡迎您"
'腳本之家歡迎您'
那么上面的正則表達(dá)式就實(shí)現(xiàn)此功能,當(dāng)前面的子表達(dá)式匹配單引號的時候,那么后面的\1也就表示的是單引號,如果子表示匹配的雙引號,那么后面的\2就表示的是雙引號。
非引用型分組:
分組會占用一定的系統(tǒng)資源,尤其是正則表達(dá)式較長的時候會降低匹配速度。有時候僅僅是為了設(shè)置一個分組,并不需要引用,那么使用非引用類型分組將會是一個良好的選擇。
/(java(?:script))/
以上正則就是使用非引用分組,只要在左括號后面加上一個?:即可。
相關(guān)文章
PHP正則表達(dá)式基本函數(shù) 修飾符 元字符和需轉(zhuǎn)義字符說明
寫在前面:PHP正則的執(zhí)行效率并不高,而且比較耗資源,能不能則不用。2010-07-07JavaScript replace new RegExp使用介紹
這篇文章主要介紹了JavaScript replace new RegExp使用介紹,需要的朋友可以參考下2016-05-05常用的正則表達(dá)式大全(數(shù)字、字符、固定格式)
正則表達(dá)式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。本文給大家分享常用的正則表達(dá)式大全(數(shù)字、字符、固定格式),感興趣的小伙伴一起學(xué)習(xí)吧2016-04-04jQuery如何用正則表達(dá)式驗(yàn)證手機(jī)號、身份證號、中文名稱
這篇文章主要介紹了jQuery如何用正則表達(dá)式驗(yàn)證手機(jī)號、身份證號、中文名稱 的相關(guān)資料,需要的朋友可以參考下2016-06-06