'12334565632'.replace(/(\d)(?=(\d{3})+$)/g, "$1,");//結(jié)果:"12,334,565,632"
上邊這個是網(wǎng)上找的,是可以實現(xiàn)的,但是和我理解的不一樣,我說下我是怎么想的,大家?guī)臀抑刚?,謝謝。
1.(?=(\d{3})+$)/g 這里用了一個零寬斷言,我認為(\d{3})后邊這個+是說出現(xiàn)1次或更多次的意思,那么如果我將前邊的字符串換成'2'的時候我發(fā)現(xiàn)也匹配成功了,按理說他沒有匹配到3個數(shù)字??!為什么還是成功了呢??
2.這個$1匹配的應(yīng)該是表達式(\d)這個啊,這個不是1個數(shù)字嗎,為什么顯示結(jié)果$1匹配的確是3位呢??
求大神解答··
擁有18年軟件開發(fā)和IT教學(xué)經(jīng)驗。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項目經(jīng)理、高級軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
第一問你說的換成2是指把{3}換成{2}嗎? 這樣最后結(jié)果只會是"1,23,34,56,56,32"
第二問我的理解是$1指的是匹配出來的項中符合第一個小括號的內(nèi)容,匹配的項有"5632","4565632","2334565632",紅色部分就是符合第一個小括號的,然后在這幾個數(shù)的后面添加逗號。
問題一:
(\d{3})+$ 的意思是連續(xù)匹配 3 個數(shù)字,且最后一次匹配以 3 個數(shù)字結(jié)尾。如果將數(shù)字變成 2,那么就是連續(xù)匹配 2 個數(shù)字且最后一次匹配也是 2 個數(shù)字,就像這樣 "1,23,34,56,56,32"
問題二:
$1 并不是 1 ,因為 1 并不符合條件(?=(\d{3})+$),它要求一個數(shù)字(\d)后面的數(shù)字的個數(shù)是 3 的倍數(shù),只要滿足這種條件,(\d) 才能匹配成功,才能讓 $1 反向引用?!?2334565632” 這個例子中,只有第二,第五,第八個數(shù)字滿足條件
/(\d)(?=(\d{3})+$)/g , 這個正則表達式我是這么理解的:
先理解一個要點:/(\d)(?=(\d{3})+$)/g
紅色的 \d 和 $ 之間,數(shù)字字符的個數(shù)是 3 的整數(shù)倍。
然后,把這個數(shù)字字符捕獲到分組中,在它后邊加個逗號“,”。 ?
效果如下:
'12334565632' ?
替換后:
'12,334,565,632'
用零寬斷言,是為了保證后面的字符不被消耗掉,這樣可以多次匹配。
網(wǎng)上這個方法用的是 零寬度正預(yù)測先行斷言,它斷言匹配的自身出現(xiàn)的位置d的后面能跟著匹配到1個或者n個3位數(shù)且剛好到結(jié)尾$。
1.那么如果我將前邊的字符串換成'2'的時候我發(fā)現(xiàn)也匹配成功了,不管你換的是字符串還是正則表達式,應(yīng)該都是不成功的。
2.$1匹配的就是表達式(d)這個。你可以把全局g去掉看一下:
'12334565632'.replace(/(\d)(?=(\d{3})+$)/, "$1,"); //"12,334565632"
題中分別匹配的是str[1],str[4],str[7] ,并在后面加上','