要理解?=和?!,首先需要理解前瞻,后顧,負(fù)前瞻,負(fù)后顧四個(gè)概念:
// 前瞻:
exp1(?=exp2) 查找exp2前面的exp1
// 后顧:
(?<=exp2)exp1 查找exp2后面的exp1
// 負(fù)前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
// 負(fù)后顧:
(?<!exp2)exp1 查找前面不是exp2的exp1
舉例:
"中國人".replace(/(?<=中國)人/, "rr") // 匹配中國人中的人,將其替換為rr,結(jié)果為 中國rr
"法國人".replace(/(?<=中國)人/, "rr") // 結(jié)果為 法國人,因?yàn)槿饲懊娌皇侵袊詿o法匹配到
要理解?:則需要理解捕獲分組和非捕獲分組的概念:
()表示捕獲分組,()會(huì)把每個(gè)分組里的匹配的值保存起來,使用$n(n是一個(gè)數(shù)字,表示第n個(gè)捕獲組的內(nèi)容)
(?:)表示非捕獲分組,和捕獲分組唯一的區(qū)別在于,非捕獲分組匹配的值不會(huì)保存起來
舉例:
// 數(shù)字格式化 1,123,000
"1234567890".replace(/\B(?=(?:\d{3})+(?!\d))/g,",")
// 結(jié)果:1,234,567,890,匹配的是后面是3*n個(gè)數(shù)字的非單詞邊界(\B)
正則表達(dá)式的() [] {} 有著不同的意思。
() 是為了提取匹配字符串的,表達(dá)式中有幾個(gè)()就有幾個(gè)相應(yīng)的匹配字符串
(\s)表示連續(xù)空格的字符串
[] 是定義匹配的字符范圍。比如[a-zA-Z0-9]表示相應(yīng)位置的字符要匹配英文字符和數(shù)字。[\s表示空格或者號(hào)]
{}一般是用來匹配的長度。比如\s{3}表示匹配三個(gè)空格,\s[1,3]表示匹配1到3個(gè)空格
(0-9)匹配'0-9'本身。[0-9]匹配數(shù)字(注意后面有*,可以為空)[0-9]+匹配數(shù)字(注意后面有+,不可以為空),
{0-9}寫法是錯(cuò)誤的
[0-9]{0,9}表示長度為0到9的數(shù)字字符串。
圓括號(hào)()是組,主要應(yīng)用在限制多選結(jié)構(gòu)的范圍/分組/捕獲文本/環(huán)視/特殊模式處理
示例:
1(abc|bcd|cde),表示這一段是abc、bcd、cde三者之一,順序也必須一致
2、(abc)? 表示這一組要么一起出現(xiàn),要么不出現(xiàn),出現(xiàn)那則按順序出現(xiàn)
3、(?:abc)表示找到一樣abc的一組,但是不記錄,不保存到變量中,否則可以通過變量中,否則可以通過x取第幾個(gè)括號(hào)所匹配道德項(xiàng),比如:
(aaa)(bbb)(ccc)(?:ddd)(eee)可以用1獲取(??????)匹配到的內(nèi)容,而1獲取(aaa)匹配到的內(nèi)容,而3則獲取到了(ccc)匹配到的內(nèi)容,而$4則獲取的是由(eee)匹配到的內(nèi)容,因?yàn)榍耙粚?duì)括號(hào)沒有保存變量
4.a(?=bbb)順序環(huán)視 表示a后面必須緊跟3個(gè)連續(xù)的b
5、(?i:xxxx)不區(qū)分大小寫 (?s:.*)跨行匹配,可以匹配回車符
方括號(hào)是單個(gè)匹配 字符集/排除字符集/命名字符集
示例:
1、[0-3],表示找到一個(gè)位置上的字符只能是0到3折四個(gè)數(shù)字,與(abc|bcd|cde)的作用比較類似,但圓括號(hào)可以匹配多個(gè)連續(xù)的字符
而一對(duì)方括號(hào)只能匹配單個(gè)字符
2、[^0-3] 表示找到這個(gè)位置上字符只能是除了0到3之外的所有字符
3、[:digit:] 0-9 [:alnum] A-Za-z0-9
()和[]有本質(zhì)的區(qū)別
()內(nèi)的內(nèi)容表示的是一個(gè)表達(dá)式,()本身不匹配任何東西,也不惜那是匹配任何東西,只是把括號(hào)內(nèi)的內(nèi)容作為
同一個(gè)表達(dá)式來處理,例如(ab){1,3},就表示ab一起連續(xù)出現(xiàn)最少1次,最多三次。如果沒有括號(hào)的話,ab{1,3},
就表示a 后面緊跟的b出現(xiàn)的最少一次,最多三次。另外,括號(hào)在匹配模式中也跟重要。這個(gè)就不延伸了。
[]表示匹配字符在[]中,兵出現(xiàn)一次,并且reshuffle字符寫在[]會(huì)被當(dāng)成普通字符來匹配,例如[(a)],會(huì)匹配(、a、)、這三個(gè)字符。
所以()[] 無論是作用還是表示的含義。都有天壤之別,沒有什么聯(lián)系。
版權(quán)聲明:本文為CSDN博主「這個(gè)昵稱沒有被占用吧」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/csm0912/article/details/81206848