2013-06-25 62 views
11
function putComma(price) { 
    return price.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ","); 
} 

這是一個工作片段,用於將逗號放在至少4位數字的數字上。「/ B(?=(?: d {3})+(?! d))/ g」如何在數字上添加逗號?

但是,這是如何 - >/\B(?=(?:\d{3})+(?!\d))/g告訴一個數字是至少4位數?

+3

這是正則表達式,如果你真的關心這個問題,你應該去了解更多。 [這可能是一個好的開始](http://www.regular-expressions.info/) – musefan

+0

如果你搜索正則表達式,並閱讀一些教程,你應該能夠在幾個小時內最! – adeneo

+8

感謝您的建議,但並非所有人都有足夠的空閒時間閱讀教程。 –

回答

19

和評論一樣,reading about regular expressions對你最有利(從長遠來看)。打破這個特定的正則表達式是這樣的:

  1. \B告訴它只有一個字邊界內看(這意味着它不能是其他類型的字的一部分 - 它不能是b123412b123,但只接受它發現的東西,如果它是獨立的 - 123456,a 123456 w
  2. 然後,一個前瞻(?=告訴它找到組中的任何東西(直到它到達匹配的右括號),並且只有在它作爲整體被發現時才返回,它是還要確保替換是以相反的方式完成的,因爲它看起來比字符串的末尾還要遠。
  3. ?:告訴它查找以下匹配,但不創建反向引用(正則表達式中的術語)
  4. \d{3}在一行中查找3位數。
  5. 然後+然後標記3個數字(包裹在圓括號中以確保規則被視爲一個塊,例如 - (\d{3})+)模式可以重複(3位數,6,9等)。
  6. 最後(?!\d)尋找另一個數字,但不包括,確保數字是在3,而不是組後面的數字是不是在3

所以基本上它看起來團體一個或多個3位數組,因此可以通過RegEx 而不是返回匹配的數字(因爲它們被?:忽略),因此只返回不是無關的匹配部分 - 它返回\B,這就是要替換的部分。如此有效,它僅從字符串的末尾開始替換3個完整的組,從而導致它將3333333變成3,333,333

+6

謝謝先生理解。 –

+1

正則表達式的其他部分呢?什麼是「更換」?當然不是任何數字。我認爲你的回答是不完整的 – musefan

+1

具體的問題是關於它如何知道4位數的部分 - 但我會在一分鐘內詳細說明其餘部分 – casraf

相關問題