2016-07-23 56 views
1

我試着學習JavaScript正則表達式,得到了這個表達式的地方:的Javascript正則表達式查找數字分組

"1234567890".match(/(\d{3})+(?!\d)/g) 
["234567890"] //result from log 

我不明白爲什麼會是這個樣子。任何幫助解釋這將不勝感激。謝謝!

+1

請不要問這樣教我這樣那樣的問題。 – karan

+0

正如老人所說:「如果你不能把它解釋給一個六歲的孩子,你自己真的不明白它,如果你能教人理解他們不會問的東西,那不是stackoverflow是關於什麼的? – praHoc

+1

親愛的@praHoc:在問任何事之前請看這個http://stackoverflow.com/help/how-to-ask – karan

回答

0

正則表達式匹配數字組,其條件是組長度必須是3的倍數,並且組後的字符不能是數字。


這是它如何工作的:

(\d{3})  // match exactly 3 digits 
     +  // 1 to n times 
     (?!\d) // Negative lookahead - assert that the next character is not a digit 

More about lookaheads.


在您的測試字符串,唯一可能的匹配從match()調用返回的一個。

請參見下面的代碼片段的另一個例子:

var matches = "1234foobar5678901".match(/(\d{3})+(?!\d)/g); 
 
console.log(matches); // ["234", "678901"]

+0

謝謝,我仍然不知道爲什麼結果不是['123456789' ]而不是['234567890']? – praHoc

+0

這就是負向預測的結果 - 「123456789」後面跟着一個「0」,所以不能滿足條件,然而'234567890'後面沒有數字,並且封面由正則表達式編輯。 – Timo

+0

謝謝你的例子,我可以說在後面(?!\ d)尋找d * 3到N的時間嗎?我的頭與正則表達式!在這一刻。 – praHoc