最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

正則表達(dá)式(?=)正向先行斷言實(shí)戰(zhàn)案例

 更新時(shí)間:2022年11月17日 10:20:39   作者:AdamShyly  
x(?=y)稱為先行斷言(Positive look-ahead),x只有在y前面才匹配,y不會(huì)被計(jì)入返回結(jié)果,比如要匹配后面跟著百分號(hào)的數(shù)字,可以寫成/\d+(?=%)/,這篇文章主要給大家介紹了關(guān)于正則表達(dá)式(?=)正向先行斷言的相關(guān)資料,需要的朋友可以參考下

最近在練習(xí)正則表達(dá)式,遇到了一道很有意思的題,題目如下

我的答案如下

(?=.*?[A-Z])(?=.*?\d)(?=.*?[a-z]).{8,}

對(duì)于這個(gè)答案的理解得先從正向先行斷言的語(yǔ)法開(kāi)始說(shuō)起。

正向先行斷言的語(yǔ)法格式如下

expression1(?=expression2)
# 查找expression2前面的expression1

當(dāng)然這個(gè)expression1也可以不寫(也就是為空白符

例子如下

該正則表達(dá)式的意思為:尋找abcd字符串前的123456字符串。

這里也提一個(gè)有意思的地方

以上兩個(gè)正則表達(dá)式中的/\d+/gm/123456/gm其實(shí)都能匹配123456這個(gè)字符串,但在正向先行斷言中,前者會(huì)匹配每個(gè)數(shù)字前面的空白符,后者將123456字符串當(dāng)成一個(gè)整體,只匹配這個(gè)整體前面的空白符。

這里面的原理還需要等我研究一下,估計(jì)是跟底層代碼的實(shí)現(xiàn)有關(guān),我猜測(cè)是(?=\d+)在匹配的時(shí)候會(huì)將每個(gè)數(shù)字單獨(dú)提取出然后向前比較。

那么回到該題的答案中,先讓我們看看 (?=.*?[A-z]) 是什么意思。

很明顯上圖匹配了大寫字母A前面的所有空白符

其中的.*?[A-Z]代表大寫字母及其前面的字符串且為懶惰匹配

那么(?=.*?[A-Z])(?=.*?\d)的意思就有點(diǎn)套娃了,按我的理解就是對(duì)于(?=.*?\d)而言把(?=.*?[A-Z])當(dāng)成expression1,對(duì)于(?=.*?[A-Z])而言就是把空白符當(dāng)成expression1。

那么這個(gè)正則表達(dá)式就表示為:在尋找到每個(gè)大寫字母前面的所有空白符的基礎(chǔ)上還要滿足:這些空白符都在每個(gè)數(shù)字前面的所有空白符這個(gè)匹配集合中。相當(dāng)于是兩個(gè)空白符集合的交集。

所以(?=.*?[A-Z])(?=.*?\d)(?=.*?[a-z])相當(dāng)于是每個(gè)大寫字母、小寫字母、數(shù)字前面的所有空白字符的交集。

 而后面的.{8,}則匹配這些空白字符后面至少八位字符(貪婪匹配)。

附:先行否定斷言

x(?!y)稱為先行否定斷言(Negative look-ahead),x只有不在y前面才匹配,y不會(huì)被計(jì)入返回結(jié)果。比如,要匹配后面跟的不是百

分號(hào)的數(shù)字,就要寫成/\d+(?!%)/。

/\d+(?!\.)/.exec('3.14') // ["14"]
// ["14"]

上面代碼中,正則表達(dá)式指定,只有不在小數(shù)點(diǎn)前面的數(shù)字才會(huì)被匹配,因此返回的結(jié)果就是14。

“先行否定斷言”中,括號(hào)里的部分是不會(huì)返回的。

var m = 'abd'.match(/b(?!c)/);
m // ['b']

上面的代碼使用了先行否定斷言,b不在c前面所以被匹配,而且括號(hào)對(duì)應(yīng)的d不會(huì)被返回。

總結(jié)

到此這篇關(guān)于正則表達(dá)式(?=)正向先行斷言的文章就介紹到這了,更多相關(guān)正則表達(dá)式正向先行斷言內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

玛多县| 芜湖县| 江达县| 青岛市| 库尔勒市| 四子王旗| 莆田市| 固镇县| 壶关县| 治多县| 江津市| 广水市| 确山县| 五河县| 肃宁县| 思茅市| 龙州县| 靖江市| 论坛| 稻城县| 新龙县| 苍南县| 长海县| 扶绥县| 桐城市| 车险| 星子县| 景东| 淄博市| 广西| 崇州市| 莫力| 双鸭山市| 肃宁县| 桐柏县| 丰台区| 修文县| 军事| 株洲县| 库尔勒市| 大悟县|