摘要:但不管是那種匹配都必須保證匹配滿足正則表達(dá)式基本條件。在正則表達(dá)式中,通過(guò)分組可以在一個(gè)完整的模式中定義子模式。在同一個(gè)正則表達(dá)式的后部分可以引用前面的子表達(dá)式。
預(yù)定義字符類
.(點(diǎn)好): 匹配除了換行符和其他Unicode行終止符(如回車符)之外的任意字符,等價(jià)于[^ ] w: 匹配任何ASII單字字符,等價(jià)于[a-zA-Z0-9_] W: 匹配任何非ASII單字字符,等價(jià)于[^a-zA-Z0-9_] s: 匹配任何Unicode空白符,等價(jià)于[ x0Bf ]貪婪匹配
概念:如星號(hào)(*)元字符在執(zhí)行匹配時(shí),先看整個(gè)字符串是否匹配,如果不匹配則去掉該字符串中的最后一個(gè)字符,并再次嘗試。
1.?、{n}和{n,m}重復(fù)類
這三個(gè)都具有弱貪婪性,主要表現(xiàn)在貪婪性具有有限性。對(duì)于?匹配,在選擇匹配還是不匹配時(shí),如果條件允許,它總是會(huì)選擇匹配而不是不匹配;{n,m}在條件允許的情況下,匹配m次,而不是n次。 正則式的貪婪性是在遵循匹配條件基礎(chǔ)上盡可能占有更多的字符,而不是隨意占用。
2.*、+和{n,}重復(fù)類
這三個(gè)具有強(qiáng)貪婪性,這種貪婪表現(xiàn)為貪婪的無(wú)限性
星號(hào)(*)重復(fù)類的匹配底線是最寬容的,匹配欲望是最強(qiáng)烈的。不管是否存在指定字符或子表達(dá)式都會(huì)執(zhí)行匹配操作
加號(hào)(+)重復(fù)類的匹配底線是最少存在一個(gè)符合指定條件的字符或子表達(dá)式,否則不予執(zhí)行匹配操作
{n,}重復(fù)類的匹配底線是最靈活的,執(zhí)行任意底線和條件的無(wú)限貪婪的匹配操作。
正則表達(dá)式是有貪婪性的,它總是與最長(zhǎng)的長(zhǎng)度匹配,而且越是排在左側(cè)的重復(fù)類匹配符優(yōu)先級(jí)就越高。
var s = ""; var r = /(<.*>)(<.*>)/ var a = s.match(r); alert(a[1])// alert(a[2])//
上面的演示說(shuō)明,當(dāng)多個(gè)重復(fù)類并列子在一起時(shí),左側(cè)重復(fù)類具有較大的優(yōu)先權(quán),并盡可能的占有更多的符合條件的字符。
惰性匹配惰性匹配它將先查看字符串中的第一個(gè)字符是否匹配,如果匹配條件不夠,就讀入下一個(gè)字符。如果還是匹配不足夠,惰性匹配會(huì)繼續(xù)從字符串中讀取字符串直到發(fā)現(xiàn)匹配或者整個(gè)字符串都檢查過(guò)也沒(méi)有匹配為止。惰性匹配只需要在重復(fù)類后面添加問(wèn)號(hào)(?)就可以了。問(wèn)號(hào)必須放在重復(fù)字符串后面。
貪婪匹配體現(xiàn)了最大化匹配原則,那么惰性匹配體現(xiàn)了最小化匹配原則。但不管是那種匹配都必須保證匹配滿足正則表達(dá)式基本條件。
{n,m}?: 正則表達(dá)式盡量匹配n次,但是為了滿足匹配條件也可能最多重復(fù)m次
{n}?: 正則表達(dá)式盡量匹配n次;
{n,}?: 盡量匹配n次,但為了滿足匹配條件也可能匹配任意次
??: 正則表達(dá)式盡量匹配,但是為了滿足匹配條件也可能多次匹配1次,相當(dāng)于{0,1}?
+?: 盡量匹配1次,但是為了滿足匹配條件也可能匹配任意次數(shù),相當(dāng)于{1,}?
*?:相當(dāng)于{0,}?
支配匹配(瀏覽器兼容不強(qiáng))這個(gè)是另一種類型的匹配模式,它的算法是:只匹配整個(gè)字符串。如果整個(gè)字符串不能匹配,則會(huì)自動(dòng)放棄匹配,不再執(zhí)行迭代以求進(jìn)一步嘗試。支配匹配只需要在重復(fù)類后面添加加號(hào)(+)即可。
高級(jí)匹配模式1.分組:就是通過(guò)用小括號(hào)來(lái)包含一系列字符、字符類,或者重復(fù)類量詞,以實(shí)現(xiàn)處理各種特殊的字符序列
通過(guò)小括號(hào)邏輯分隔符,實(shí)現(xiàn)分別儲(chǔ)存每個(gè)被匹配的標(biāo)簽,最后通過(guò)這個(gè)數(shù)組類獲取每個(gè)標(biāo)簽的名稱。小括號(hào)表示一個(gè)獨(dú)立的邏輯域,其匹配的內(nèi)容將被獨(dú)立存儲(chǔ)。
分組的應(yīng)用價(jià)值
把多帶帶的項(xiàng)目進(jìn)行分組,以便合成子表達(dá)式,這樣就可以像處理yi個(gè)獨(dú)立的字符那樣,使用|、+、*或?等字符來(lái)處理他們。
在正則表達(dá)式中,通過(guò)分組可以在一個(gè)完整的模式中定義子模式。當(dāng)一個(gè)正在表達(dá)式成功地與目標(biāo)字符串匹配時(shí),也可以從目標(biāo)字符串中抽出與小括號(hào)中的子模式相匹配的部分。
var s = "ab=21,bc=45,cd=43"; var r = /(w+)=(d+)/; var a = s.match(r); ["ab=21","ab","21"]
在同一個(gè)正則表達(dá)式的后部分可以引用前面的子表達(dá)式。這是通過(guò)在字符“”后加一位或多位數(shù)字實(shí)現(xiàn)的。數(shù)字指定了帶括號(hào)的子表達(dá)式在正則表達(dá)式中的位置
var s = "非引用型分組title
text
" var r = /(?w+>).*1/g; var a = s.match(r);//["title
","text
"]
正則表達(dá)式分組會(huì)占用一定的系統(tǒng)資源,在較長(zhǎng)的正則表達(dá)式中,存儲(chǔ)反向引用會(huì)降低匹配速度。創(chuàng)建非引用型分組的方法是,在括號(hào)的后面分別加上一個(gè)問(wèn)號(hào)和冒號(hào)。(?:w*?)
聲明正則表達(dá)式用來(lái)聲明正則表達(dá)式在什么條件下才能匹配,或者不在什么條件下才會(huì)匹配,這種聲明包括正前向聲明和反向前聲明兩種模式
正前向聲明是指匹配模式后面的字符,聲明表示條件的意思,也是指定在接下來(lái)的字符必須被匹配,但并不真正進(jìn)行匹配。通俗的講,就是指定可能執(zhí)行匹配操作的條件,該條件作為正則表達(dá)式的匹配模式一部分而存在,但是不會(huì)真正使用該條件去執(zhí)行匹配。
var s = "a:123 b=345"; var r = /w*(?==)/; var a = s.match(r);//["b"]
反前向聲明,就是指定接下來(lái)的字符都不必匹配,反前向聲明使用“(?!匹配條件)”來(lái)表示
var s = "a:123 b=345"; var r = /w*(?!=)/; var a = s.match(r);//["a"]靜態(tài)
var s = "JavaScript, not Javascript"; var r = /(Java)Script/gi; var a = r.exec(s); RegExp.input//"JavaScript, not Javascript" RegExp.leftContext//空字符串 RegExp.rightContext//", not Javascript" RegExp.lastMatch//"JavaScript" RegExp.lastParen//"Java"
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82634.html
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書(shū)問(wèn)世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫(xiě),作用是對(duì)字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語(yǔ)言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來(lái)查找特定的信息(搜索),也可以用來(lái)查...
摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門(mén):初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...
摘要:正則表達(dá)式一直是里比較難以掌握的點(diǎn)。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達(dá)式的字面量語(yǔ)法,表示正則表達(dá)式的模式,為正則表達(dá)式的標(biāo)志。字面量形式的正則表達(dá)式一般使用較多,也推薦大家盡可能使用這種形式,簡(jiǎn)潔易讀,符合正常的使用習(xí)慣。 正則表達(dá)式一直是js里比較難以掌握的點(diǎn)。 看不懂,學(xué)不會(huì),記不住。 每次需要用到正則的時(shí)候,都需要再去查找資料。 今天花時(shí)間把正則的知識(shí)點(diǎn)總結(jié)下,希望...
摘要:注意本文將正則與中的正則分開(kāi)討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過(guò)設(shè)置正則表達(dá)式后的修飾符可開(kāi)啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來(lái)源于語(yǔ)言書(shū)上那幾頁(yè)的介紹, 自己也沒(méi)有用過(guò)幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...
摘要:選擇分組和引用正則表達(dá)式的語(yǔ)法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號(hào)的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對(duì)象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫(xiě),作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語(yǔ)法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書(shū)分享。本篇按照書(shū)里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書(shū)里的一些問(wèn)題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...
閱讀 1199·2023-04-26 02:42
閱讀 1641·2021-11-12 10:36
閱讀 1804·2021-10-25 09:47
閱讀 1274·2021-08-18 10:22
閱讀 1815·2019-08-30 15:52
閱讀 1225·2019-08-30 10:54
閱讀 2642·2019-08-29 18:46
閱讀 3504·2019-08-26 18:27