溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

正則表達(dá)式分組的示例分析

發(fā)布時(shí)間:2021-09-23 10:03:21 來(lái)源:億速云 閱讀:99 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章將為大家詳細(xì)講解有關(guān)正則表達(dá)式分組的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

正則表達(dá)式分組:
如果想匹配3個(gè)數(shù)字,正則表達(dá)式可以用如下寫(xiě)法:

\d{3}

以上代碼使用重復(fù)量詞可以匹配3位數(shù)字。
但是在實(shí)際應(yīng)用中,往往需要重復(fù)多個(gè)字符,例如我想重復(fù)ab兩個(gè)字符,使用以下代碼就不合適了,代碼如下:

ab{3}

以上正則表達(dá)式只能夠重復(fù)3次b。
為了實(shí)現(xiàn)重復(fù)多個(gè)字符可以使用小括號(hào)來(lái)指定子表達(dá)式或者說(shuō)分組來(lái)實(shí)現(xiàn)此功能,例如:

(ab){3}

上面的正則就可以重復(fù)ab了。
所謂的分組就是使用小括號(hào)將一些項(xiàng)包括起來(lái),使其成為獨(dú)立的邏輯域,那么就可以像處理一個(gè)獨(dú)立單元一樣去處理小括號(hào)的內(nèi)容。

下面看一段代碼實(shí)例:

(\d{1,3}\.){3}\d{1,3}

上面是一個(gè)簡(jiǎn)單的ip匹配正則表達(dá)式。由小括號(hào)包裹的內(nèi)容會(huì)被作為一個(gè)獨(dú)立的邏輯域進(jìn)行操作。
分組的作用:
在正則表達(dá)式中,分組具有舉足輕重的作用,下面就簡(jiǎn)單對(duì)它的功能做一下簡(jiǎn)單的介紹。

一.起到原始的分組作用:

把單獨(dú)的項(xiàng)目進(jìn)行分組,以便合成子表達(dá)式,這樣就可以像處理一個(gè)單獨(dú)的字符那樣,對(duì)其應(yīng)用|、+、*或者?等元字符來(lái)操作它們。
實(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次。

二.定義子模式:

分組另一個(gè)非常重要的作用就是在完整的模式中定義子模式。
當(dāng)一個(gè)正則表達(dá)式成功的和目標(biāo)字符串相匹配時(shí),可以從目標(biāo)字符串中抽出和小括號(hào)中字表達(dá)式相匹配的部分。
假如我們匹配的是以一個(gè)數(shù)字開(kāi)頭的后面跟著一個(gè)或者多個(gè)不區(qū)分大小寫(xiě)的字母的字符串,正則表達(dá)式可以這樣寫(xiě):

/\d[a-zA-Z]+/

假如我們真正關(guān)心和需要的是開(kāi)頭的數(shù)字,那么就可以將正則表達(dá)式的數(shù)字部分放入小括號(hào)就可以從檢索到的匹配中抽取數(shù)字.

/(\d)[a-zA-Z]+/

三.引用子表達(dá)式:
正則表達(dá)語(yǔ)法中可以在同一個(gè)表達(dá)式中的后部引用前面的子表達(dá)式。這是通過(guò)在"\"后面跟隨數(shù)字實(shí)現(xiàn)的。此數(shù)字指定了小括號(hào)字表達(dá)式在正則表達(dá)式中的位置,例如\1是引用的第一個(gè)帶有圓括號(hào)的子表達(dá)式,自然\2就是第二個(gè)帶有圓括號(hào)的子表達(dá)式。
特別注意:由于子表達(dá)式是可以相互嵌套的,那么計(jì)算子表達(dá)式的位置的時(shí)候,只要確定左括號(hào)的位置即可。例如:

/(java(script))/

在以上正則表達(dá)式中,嵌套的子表示是可以用\2表示。
對(duì)于子表達(dá)式的引用,并不是引用的匹配模式,而是對(duì)子表示匹配內(nèi)容的引用。一般來(lái)說(shuō)對(duì)子表達(dá)式的引用一般是用來(lái)實(shí)施一條約束,看下面的代碼:

/(['"])[^'"]*\1/

通常情況下左右引號(hào)是相匹配的,如果前面是雙引號(hào),那么結(jié)尾也要是雙引號(hào),前面是單引號(hào)那么結(jié)尾也必須是單引號(hào),并且字符串中間不能夠再出現(xiàn)其他的引號(hào),例如:

"億速云歡迎您"
'億速云歡迎您'

那么上面的正則表達(dá)式就實(shí)現(xiàn)此功能,當(dāng)前面的子表達(dá)式匹配單引號(hào)的時(shí)候,那么后面的\1也就表示的是單引號(hào),如果子表示匹配的雙引號(hào),那么后面的\2就表示的是雙引號(hào)。
非引用型分組:
分組會(huì)占用一定的系統(tǒng)資源,尤其是正則表達(dá)式較長(zhǎng)的時(shí)候會(huì)降低匹配速度。有時(shí)候僅僅是為了設(shè)置一個(gè)分組,并不需要引用,那么使用非引用類(lèi)型分組將會(huì)是一個(gè)良好的選擇。

/(java(?:script))/

以上正則就是使用非引用分組,只要在左括號(hào)后面加上一個(gè)?:即可。

關(guān)于“正則表達(dá)式分組的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI