要理解?=和?!惠拭,首先需要理解前瞻三椿,后顧庆械,負(fù)前瞻沃疮,負(fù)后顧四個(gè)概念:
// 前瞻:
exp1(?=exp2) 查找exp2前面的exp1
// 后顧:
(?<=exp2)exp1 查找exp2后面的exp1
// 負(fù)前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
// 負(fù)后顧:
(?<!exp2)exp1 查找前面不是exp2的exp1
舉例:
"中國(guó)人".replace(/(?<=中國(guó))人/, "rr") // 匹配中國(guó)人中的人盒让,將其替換為rr梅肤,結(jié)果為 中國(guó)rr
"法國(guó)人".replace(/(?<=中國(guó))人/, "rr") // 結(jié)果為 法國(guó)人,因?yàn)槿饲懊娌皇侵袊?guó)邑茄,所以無法匹配到
要理解?:則需要理解捕獲分組和非捕獲分組的概念:
()表示捕獲分組姨蝴,()會(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)]
{}一般是用來匹配的長(zhǎng)度。比如\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}表示長(zhǎng)度為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)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/csm0912/article/details/81206848