這篇文章主要為大家展示了“javascript中正則表達(dá)式分組、斷言的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“javascript中正則表達(dá)式分組、斷言的示例分析”這篇文章吧。
十余年的雞冠網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整雞冠建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“雞冠網(wǎng)站設(shè)計(jì)”,“雞冠網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。javascript 正則表達(dá)式分組、斷言詳解
提示:閱讀本文需要有一定的正則表達(dá)式基礎(chǔ)。
正則表達(dá)式中的斷言,作為高級(jí)應(yīng)用出現(xiàn),倒不是因?yàn)樗卸嚯y,而是概念比較抽象,不容易理解而已,今天就讓小菜通俗的講解一下。
如果不用斷言,以往用過的那些表達(dá)式,僅僅能獲取到有規(guī)律的字符串,而不能獲取無規(guī)律的字符串。
舉個(gè)例子,比如html源碼中有
想解決以上問題,就要用到斷言知識(shí)。
在講斷言之前,讀者應(yīng)該先了解分組,這有助于理解斷言。
分組在正則中用()表示,根據(jù)小菜理解,分組的作用有兩個(gè):
n 將某些規(guī)律看成是一組,然后進(jìn)行組級(jí)別的重復(fù),可以得到意想不到的效果。
n 分組之后,可以通過后向引用簡(jiǎn)化表達(dá)式。
先來看第一個(gè)作用,對(duì)于IP地址的匹配,簡(jiǎn)單的可以寫為如下形式:
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
但仔細(xì)觀察,我們可以發(fā)現(xiàn)一定的規(guī)律,可以把.\d{1,3}看成一個(gè)整體,也就是把他們看成一組,再把這個(gè)組重復(fù)3次即可。表達(dá)式如下:
\d{1,3}(.\d{1,3}){3}
這樣一看,就比較簡(jiǎn)潔了。
再來看第二個(gè)作用,就拿匹配
可以看出,上邊表達(dá)式中有兩個(gè)title,完全一樣,其實(shí)可以通過分組簡(jiǎn)寫。表達(dá)式如下:
<(title)>.*\1>
這個(gè)例子實(shí)際上就是反向引用的實(shí)際應(yīng)用。對(duì)于分組而言,整個(gè)表達(dá)式永遠(yuǎn)算作第0組,在本例中,第0組是<(title)>.*\1>,然后從左到右,依次為分組編號(hào),因此,(title)是第1組。
用\1這種語(yǔ)法,可以引用某組的文本內(nèi)容,\1當(dāng)然就是引用第1組的文本內(nèi)容了,這樣一來,就可以簡(jiǎn)化正則表達(dá)式,只寫一次title,把它放在組里,然后在后邊引用即可。
以此為啟發(fā),我們可不可以簡(jiǎn)化剛剛的IP地址正則表達(dá)式呢?原來的表達(dá)式為\d{1,3}(.\d{1,3}){3},里邊的\d{1,3}重復(fù)了兩次,如果利用后向引用簡(jiǎn)化,表達(dá)式如下:
(\d{1,3})(.\1){3}
簡(jiǎn)單的解釋下,把\d{1,3}放在一組里,表示為(\d{1,3}),它是第1組,(.\1)是第2組,在第2組里通過\1語(yǔ)法,后向引用了第1組的文本內(nèi)容。
經(jīng)過實(shí)際測(cè)試,會(huì)發(fā)現(xiàn)這樣寫是錯(cuò)誤的,為什么呢?
小菜一直在強(qiáng)調(diào),后向引用,引用的僅僅是文本內(nèi)容,而不是正則表達(dá)式!
也就是說,組中的內(nèi)容一旦匹配成功,后向引用,引用的就是匹配成功后的內(nèi)容,引用的是結(jié)果,而不是表達(dá)式。
因此,(\d{1,3})(.\1){3}這個(gè)表達(dá)式實(shí)際上匹配的是四個(gè)數(shù)都相同的IP地址,比如:123.123.123.123。
至此,讀者已經(jīng)掌握了傳說中的后向引用,就這么簡(jiǎn)單。
接下來說說什么是斷言。
所謂斷言,就是指明某個(gè)字符串前邊或者后邊,將會(huì)出現(xiàn)滿足某種規(guī)律的字符串。
就拿文章開篇的例子來說,我們想要的是xxx,它沒有規(guī)律,但是它前邊肯定會(huì)有
想指定xxx前肯定會(huì)出現(xiàn)
向指定xxx后邊肯定會(huì)出現(xiàn)
兩個(gè)加在一起,就是(?<=
這樣就能匹配到xxx。
相信讀者看到這,已經(jīng)蒙了,不用急,待小菜慢慢講來。
其實(shí)掌握了規(guī)律,就很簡(jiǎn)單了,無論是先行還是后發(fā),都是相對(duì)于xxx而言的,也就是相對(duì)于目標(biāo)字符串而言。
假如目標(biāo)字符串后邊有條件,可以理解為目標(biāo)字符串在前,就用先行斷言,放在目標(biāo)字符串之后。
假如目標(biāo)字符串前邊有條件,可以理解為目標(biāo)字符串在后,就用后發(fā)斷言,放在目標(biāo)字符串之前。
假如指定滿足某個(gè)條件,就是正。
假如指定不滿足某個(gè)條件,就是負(fù)。
斷言只是條件,幫你找到真正需要的字符串,本身并不會(huì)匹配!
(?=X ) | 零寬度正先行斷言。僅當(dāng)子表達(dá)式 X 在 此位置的右側(cè)匹配時(shí)才繼續(xù)匹配。例如,/w+(?=/d) 與后跟數(shù)字的單詞匹配,而不與該數(shù)字匹配。此構(gòu)造不會(huì)回溯。 |
(?!X) | 零寬度負(fù)先行斷言。僅當(dāng)子表達(dá)式 X 不在 此位置的右側(cè)匹配時(shí)才繼續(xù)匹配。例如,例如,/w+(?!/d) 與后不跟數(shù)字的單詞匹配,而不與該數(shù)字匹配 。 |
(?<=X) | 零寬度正后發(fā)斷言。僅當(dāng)子表達(dá)式 X 在 此位置的左側(cè)匹配時(shí)才繼續(xù)匹配。例如,(?<=19)99 與跟在 19 后面的 99 的實(shí)例匹配。此構(gòu)造不會(huì)回溯。 |
(? | 零寬度負(fù)后發(fā)斷言。僅當(dāng)子表達(dá)式 X 不在此位置的左側(cè)匹配時(shí)才繼續(xù)匹配。例如,(? |
從斷言的表達(dá)形式可以看出,它用的就是分組符號(hào),只不過開頭都加了一個(gè)問號(hào),這個(gè)問號(hào)就是在說這是一個(gè)非捕獲組,這個(gè)組沒有編號(hào),不能用來后向引用,只能當(dāng)做斷言。
以上是“javascript中正則表達(dá)式分組、斷言的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。