摘要:什么是環(huán)視環(huán)視結(jié)構(gòu)不匹配任何字符,只匹配文本中的特定位置,這一點與單詞分界符錨點以及相似,但是環(huán)視比它們更加通用,并且能夠檢測兩側(cè)文本。利用環(huán)視的正則表達式為我們知道表示非數(shù)字,那么這里表達式如果修改為是否可以正常工作。
什么是環(huán)視(lookaround)?
環(huán)視結(jié)構(gòu)不匹配任何字符,只匹配文本中的特定位置,這一點與單詞分界符b、錨點^以及$相似,但是環(huán)視比它們更加通用,并且能夠檢測兩側(cè)文本。
環(huán)視的四種類型:
1)順序環(huán)視-肯定(從左至右查看文本):表達式為(?=……),匹配成功的條件為表達式能夠匹配右側(cè)文本,比如(?=d)
2)順序環(huán)視-否定(從左至右查看文本):表達式為(?!......),匹配成功的條件為表達式不能匹配右側(cè)文本,比如(?!d)
3)逆序環(huán)視-肯定(從右至左查看文本):表達式為(?<=……),匹配成功的條件為表達式能夠匹配左側(cè)文本,比如(?<=d)
4)逆序環(huán)視-否定(從右至左查看文本):表達式為(?
環(huán)視在個人經(jīng)歷項目中的兩個實際應用:
團隊管理中檢測對于指定項目的權(quán)限:項目中我們是用類似38:1,749:0,188:1這樣的字符串來存儲團隊普通成員對于各用戶項目的權(quán)限,比如其中749代表ID為749的用戶項目,冒號標記符后跟隨的0數(shù)字表示具有查看權(quán)限,1數(shù)字則表示兼具查看和設置權(quán)限,多個用戶項目權(quán)限標記間以逗號分隔,如果對于一個用戶項目沒有任何權(quán)限,則整個權(quán)限字符串中將不會出現(xiàn)該項目ID?;窘Y(jié)構(gòu)定了之后,那么我們其中一個類似的查找檢測權(quán)限問題是,已知用戶權(quán)限字符串,檢測對于指定項目比如749是否具有設置權(quán)限,在這里的問題情境其實就是檢測用戶權(quán)限字符串中是否包含749:1這個子字符串??梢杂腥缦聨追N解決方式:
1)可以不用正則表達式,先以逗號作為分隔符拆分權(quán)限字符串,可以得到一個數(shù)組,該數(shù)組每一個元素為類似749:1這樣的單個項目權(quán)限標記子字符串,再檢測這個數(shù)組中是否存在749:1這一元素項。
2)匹配749:1出現(xiàn)情況的正則表達式為^749:1|,749:1,進一步可以簡化為(^|,)749:1(注意:一個小陷阱,想想這里如果不使用正則表達式匹配,而只使用普通字符串749:1作為要查找匹配的目標會出現(xiàn)什么問題?)。
3)利用環(huán)視的正則表達式為(?(我們知道D表示非數(shù)字,那么這里表達式如果修改為(?<=D)749:1是否可以正常工作?)。
千分位格式化數(shù)值(各分析頁中各指標塊數(shù)據(jù)用JavaScript進行逗號格式化):例如我們需要將數(shù)值298444215格式化為298,444,215,正常思維是從這個數(shù)的右邊開始,每次數(shù)3位數(shù)字,如果左邊還有數(shù)字的話,就加入一個逗號。如果我們能把這種思路直接用到正則表達式中當然很好,可惜正則表達式一般都是從左向右工作的。不過變換下思路,逗號應該加在“左邊有數(shù)字,右邊數(shù)字的個數(shù)正好是3的倍數(shù)的位置”,這樣就可以使用環(huán)視來解決這個問題了。初步的正則表達式為:(?<=d)(?=(ffffd)+$),并結(jié)合開發(fā)語言的replace替換功能進行全局匹配替換。(想想這里如果去掉$結(jié)果會如何?)遺憾的是,JavaScript不支持逆序環(huán)視,因此如果要使用JavaScript中的正則表達式進行處理,剛剛的匹配正則表達式就需要修改為:(d)(?=(ffffd)+$),并需要結(jié)合對捕獲型括號的反向引用$1進行全局匹配替換。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100958.html
摘要:非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。 導讀 你有沒有在搜索文本的時候絞盡腦汁, 試了一個又一個表達式, 還是不行. 你有沒有在表單驗證的時候, 只是做做樣子(只要不為空就好), 然后燒香拜佛, 虔誠祈禱, 千萬不要出錯. 你有沒有在使用sed 和 grep 命令的時候, 感覺莫名其妙, 明明應該支持的元字符, 卻就是匹配不到. 甚至,...
摘要:在閱讀這篇文章前最好把同系列文章實戰(zhàn)正則表達式一驗證手機號先仔細閱讀一遍。但實際上這樣一個表達式是無法從上面的中提取第一個元素的這里主要的問題是在默認情況下點號字符無法匹配換行符。但是很遺憾,正則表達式中沒有排除型子表達式或者說排除型分組。 這篇文章通過提取html元素介紹了正則表達式中模式修飾符、貪婪匹配與非貪婪匹配、Unicode模式、環(huán)視等知識點。在閱讀這篇文章前最好把同系列文章...
摘要:對于含有量詞正則表達式,量詞是貪婪模式,會優(yōu)先選擇盡可能多的匹配修飾的字符,所以該表達式會優(yōu)先選擇匹配一個字符,當匹配不到時再選擇不匹配字符。 正則表達式的語法 普通字符 字母、數(shù)字、漢字、下劃線以及一些沒有特殊定義的標點符號,都屬于普通字符,正則表達式中的普通字符匹配字符本身,如: var str = abced console.log(str.match(/a/)) // [a,...
摘要:下面跟大家詳細分享一下寫爬蟲抓取靜態(tài)網(wǎng)站的全過程。而我們上面說的元字符都代表一定的規(guī)則和占據(jù)一定的字符。 遇到的需求 前段時間需要快速做個靜態(tài)展示頁面,要求是響應式和較美觀。由于時間較短,自己動手寫的話也有點麻煩,所以就打算上網(wǎng)找現(xiàn)成的。 中途找到了幾個頁面發(fā)現(xiàn)不錯,然后就開始思考怎么把頁面給下載下來。 由于之前還沒有了解過爬蟲,自然也就沒有想到可以用爬蟲來抓取網(wǎng)頁內(nèi)容。所以我采取的辦...
摘要:許久之后一些關于正則的黑科技才發(fā)現(xiàn)正則里也有較斷言的東東,好吧得了解了解這是什么。注括號是必須的,寫法有些語言并不完全支持,比如的正則并不支持后瞻斷言表達式,使用了會報錯的。 之前大三學習《編譯原理》的時候老師講了點叫斷言的東西,但是這門課壓根就沒聽懂過,所以一直找不到有價值的東西,好吧原諒我懶惰無知,理論不適合我,我只適合搬磚。許久之后一些關于正則的黑科技才發(fā)現(xiàn)正則里也有較斷言的東東...
閱讀 3916·2021-11-24 11:14
閱讀 3367·2021-11-22 13:53
閱讀 3944·2021-11-11 16:54
閱讀 1660·2021-10-13 09:49
閱讀 1261·2021-10-08 10:05
閱讀 3433·2021-09-22 15:57
閱讀 1788·2021-08-16 11:01
閱讀 1003·2019-08-30 15:55