2016-08-05 53 views
3

我想得到一個數字塊3如果我可以舉例如果我有號碼22345678我想得到['22','345','678']。使用下面的正則表達式JavaScript提高正則表達式來匹配數字塊3

/(\d{1,3})(?=(\d{3})+(?!\d))/g 

我得到['22','345']

任何人都可以幫助我提高我的正則表達式?

一個例子在這裏 - >https://regex101.com/r/cF6rN4/1 並且在該柱的片斷

console.log('22345678'.match(/(\d{1,3})(?=(\d{3})+(?!\d))/g));

+0

@BryceDrew:他沒有工作版本;它不匹配最後三位數字。 –

回答

5

匹配串被隨後長度的位數爲3的倍數或在末端。

console.log('22345678'.match(/\d{1,3}(?=(\d{3})+$|$)/g));

Regex explanation here.

Regular expression visualization


可以避開捕獲組,因爲它是沒有必要的。

/\d{1,3}(?=(?:\d{3})+$|$)/g 
//---------^^^------------- 

UPDATE:它可以通過使用*0或更多的重複)被更加簡化,而不是+1或更多的重複),其有助於避免管道符號。由於@torazaburo的評論(\d{3})*$(\d{3})+$|$是等效的。

/\d{1,3}(?=(\d{3})*$)/g 
+0

太棒了!謝謝! –

+0

@GonzaloPincheiraArancibia:很高興幫助:) –

+2

這與'/ \ d {1,3}(?=(\ d {3})* $)/ g'不一樣嗎? – 2016-08-06 06:07:21