正則 非獲取匹配

正則測(cè)試鏈接:https://regex101.com/

1.有哪些非獲取匹配

參考:https://www.runoob.com/regexp/regexp-metachar.html

image.png
2. 什么是非獲取匹配,和獲取匹配有什么不同

當(dāng)我們匹配一個(gè)獲取匹配的正則表達(dá)式,如/123/, 會(huì)發(fā)現(xiàn)123為選中狀態(tài)

image.png

但是當(dāng)我們匹配一個(gè)包含非獲取匹配的正則表達(dá)式時(shí),如/(?=\d)/,會(huì)發(fā)現(xiàn),以數(shù)字結(jié)尾的地方都沒有被選中,而是用虛線斷定了界限位置

image.png

3. 幾種非獲取匹配的使用理解

(1)(?:pattern)
組合或字符|使用來匹配多個(gè)重復(fù)結(jié)構(gòu)的字符串
如:"5453525150"中匹配54,50

image.png

注意:/5(?:4|0)/g寫法與/5(4|0)/g/54|50/g寫法區(qū)別不大,不能專門用作非獲取匹配的作用例子

(2)(?=pattern) 正向肯定預(yù)查
匹配以pattern結(jié)尾的字符串
如: 匹配"windows2000 windows2001"中windows2000中的windows

image.png

(3)(?!pattern) 正向否定預(yù)查
匹配不以pattern結(jié)尾的字符串
如: 匹配"windows2000 windows2001"中的windows,但不能匹配windows2000中的windows

image.png

(4)(?<=pattern) 反向肯定預(yù)查
匹配以pattern開頭的字符串
如:匹配"2000windows 2001windows"中2000windows中的windows

image.png

(5)(?<!pattern) 反向否定預(yù)查
匹配不以pattern開頭的字符串
如:匹配"2000windows 2001windows"中的windows,但不能匹配2000windows中的windows

image.png

4.非獲取匹配的實(shí)際使用距離

問題一:用正則表達(dá)式方法實(shí)現(xiàn)numsplit,為任意數(shù)字添加千位分隔符。(例如:1234567.1234轉(zhuǎn)換成1,234,567.1234

解決方法:
可以把整數(shù)部分和小數(shù)部分分開處理,小數(shù)部分不用處理
對(duì)于整數(shù)部分,由于使用普通的split(",")replace(/\d{3}/, ',')只會(huì)使得1234567轉(zhuǎn)換成123,456,7,不符合我們的初衷,所以我們要使用(?=pattern) 正向肯定預(yù)查,來查找以至少三個(gè)數(shù)字結(jié)尾的分割處

image.png

然后通過replace方法替換

replace使用
str.replace(reg/str,replacement)中replacement可以為:字符串,$n,函數(shù)
(參考:https://www.w3school.com.cn/jsref/jsref_replace.asp)

var num="1234567";

var res = num.replace(/\d(?=(\d{3})+$)/g,function(str) {
    return str + ","
})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容