鍍金池/ 問答/Android  網(wǎng)絡(luò)安全  HTML/ /\B(?=(\d{3})+(?!\d))/g這段正則如何理解,特別是那個 ‘+

/\B(?=(\d{3})+(?!\d))/g這段正則如何理解,特別是那個 ‘+’ 號

網(wǎng)上看了個千分位轉(zhuǎn)換的正則,想了半天沒想明白,為什么那個 + 要寫在那里,別的位置就不行了。

回答
編輯回答
笨小蛋

\B匹配非單詞邊界;
\d匹配一個數(shù)字;
+是量詞,表示前面的內(nèi)容重復(fù)1到多次
?=是預(yù)言,表示這個位置后面的內(nèi)容需要滿足的條件,注意只是匹配一個位置,并不匹配具體的字符,所以是零寬;
?!也是預(yù)言,表示這個位置后面的內(nèi)容不能滿足的條件,注意也只是匹配一個位置,并不匹配具體的字符,所以也是零寬;

\d{3}匹配三個數(shù)字,+表示前面的內(nèi)容重復(fù)1到多次,所以(\d{3})+表示三個數(shù)字1到多次,也就是3,6,9...3的倍數(shù)個數(shù)字的字符串;
(?!\d)匹配一個位置,這個位置后面不是數(shù)字
(?=(\d{3})+(?!\d))匹配一個位置,這個位置后面首先是3的倍數(shù)個數(shù)字的字符串,接下來的位置不是數(shù)字
/\B(?=(\d{3})+(?!\d))/g就是全局匹配一個位置,這個位置是非單詞邊界,然后后面是3的倍數(shù)個數(shù)字,然后是非數(shù)字。

比如,字符串ad12345678abs,這個正則匹配的位置就是2后面的位置,5后面的位置。2后面6(3 * 2)個數(shù)字,5后面有3(3 * 1)個數(shù)字。

2017年5月22日 06:57
編輯回答
孤影

樓上不是很準(zhǔn)確,這個‘+’ 號是表示(d{3})這個匹配項必須出現(xiàn)1次以上,相當(dāng)于{1,};這樣才能避免'999,999,'這種情況的尷尬,明白三個貪婪匹配'+,*,?',是只用正則表達(dá)式很重要的基礎(chǔ)

2018年1月17日 01:20
編輯回答
櫻花霓
(\d{3})+

是一個分組,表示分組(d{3})可以出現(xiàn)多次。

2017年6月28日 17:33