<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在練習正規表示式,遇到了一道很有意思的題,題目如下
我的答案如下
(?=.*?[A-Z])(?=.*?d)(?=.*?[a-z]).{8,}
對於這個答案的理解得先從正向先行斷言的語法開始說起。
正向先行斷言的語法格式如下
expression1(?=expression2) # 查詢expression2前面的expression1
當然這個expression1也可以不寫(也就是為空白符)
例子如下
該正規表示式的意思為:尋找abcd字串前的123456字串。
這裡也提一個有意思的地方
以上兩個正規表示式中的/d+/gm和/123456/gm其實都能匹配123456這個字串,但在正向先行斷言中,前者會匹配每個數位前面的空白符,後者將123456字串當成一個整體,只匹配這個整體前面的空白符。
這裡面的原理還需要等我研究一下,估計是跟底層程式碼的實現有關,我猜測是(?=d+)在匹配的時候會將每個數位單獨提取出然後向前比較。
那麼回到該題的答案中,先讓我們看看 (?=.*?[A-z]) 是什麼意思。
很明顯上圖匹配了大寫字母A前面的所有空白符
其中的.*?[A-Z]代表大寫字母及其前面的字串且為懶惰匹配
那麼(?=.*?[A-Z])(?=.*?d)的意思就有點套娃了,按我的理解就是對於(?=.*?d)而言把(?=.*?[A-Z])當成expression1,對於(?=.*?[A-Z])而言就是把空白符當成expression1。
那麼這個正規表示式就表示為:在尋找到每個大寫字母前面的所有空白符的基礎上還要滿足:這些空白符都在每個數位前面的所有空白符這個匹配集合中。相當於是兩個空白符集合的交集。
所以(?=.*?[A-Z])(?=.*?d)(?=.*?[a-z])相當於是每個大寫字母、小寫字母、數位前面的所有空白字元的交集。
而後面的.{8,}則匹配這些空白字元后面至少八位字元(貪婪匹配)。
附:先行否定斷言
x(?!y)稱為先行否定斷言(Negative look-ahead),x只有不在y前面才匹配,y不會被計入返回結果。比如,要匹配後面跟的不是百
分號的數位,就要寫成/d+(?!%)/。
/d+(?!.)/.exec('3.14') // ["14"] // ["14"]
上面程式碼中,正規表示式指定,只有不在小數點前面的數位才會被匹配,因此返回的結果就是14。
“先行否定斷言”中,括號裡的部分是不會返回的。
var m = 'abd'.match(/b(?!c)/); m // ['b']
上面的程式碼使用了先行否定斷言,b不在c前面所以被匹配,而且括號對應的d不會被返回。
總結
到此這篇關於正規表示式(?=)正向先行斷言的文章就介紹到這了,更多相關正規表示式正向先行斷言內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45