正則測(cè)試鏈接:https://regex101.com/
1.有哪些非獲取匹配
參考:https://www.runoob.com/regexp/regexp-metachar.html

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

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

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

注意:
/5(?:4|0)/g寫法與/5(4|0)/g,/54|50/g寫法區(qū)別不大,不能專門用作非獲取匹配的作用例子
(2)(?=pattern) 正向肯定預(yù)查
匹配以pattern結(jié)尾的字符串
如: 匹配"windows2000 windows2001"中windows2000中的windows

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

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

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

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é)尾的分割處

然后通過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 + ","
})