javascript 正則(將數字轉化為三位分隔的樣式)【轉】

來源:互聯網
上載者:User

標籤:blank   blog   單詞   替換   col   htm   exec   rip   因此   

原文:https://www.cnblogs.com/sivkun/p/7123963.html

‘12345678912345678‘.replace(/\B(?=(?:\d{3})+\b)/g, ‘,‘)

解釋:

\b : 匹配單詞邊界,就是位於字元\w([a-zA-Z0-9_])和\W[^a-zA-Z0-9_]之間的位置,或者位於字元\w和字串的開頭或者結束之間的位置。

\B : 匹配非單詞邊界

var reg = /\b\d/g;var str = ‘123‘;reg.exec(str);//["1",index:0,input:"123"]reg.exec(str);//nullreg = /\d\b/g;reg.exec(str);//["3",index:2,input:"123"]reg.exec(str);//nullreg = /\B\d/g;reg.exec(str);//["2", index: 1, input: "123"]reg.exec(str);//["3", index: 2, input: "123"]reg.exec(str);//nullreg = /\d\B/g;reg.exec(str);//["1", index: 0, input: "123"]reg.exec(str);//["2", index: 1, input: "123"]reg.exec(str);//null

通過上面代碼可以理解\b和\B到底是什麼玩意了。

`(?:exp)`:Regex中小括弧具有分組和捕獲雙重作用,如果在小闊號裡面開始加上`?:`則可以使其不被捕獲。
`exp1(?=exp2)`:正向前瞻(零寬正向先行斷言,零寬的意思是(?=exp2)不佔據位置,只是表示一個期望),要匹配的exp1要滿足後面是exp2
`exp1(?!exp2)`:負向前瞻(零寬負向先行斷言),要匹配的exp1要滿足後面是不是exp2


var str = ‘你好嗎 你好啊 你好呀‘;var reg = /好(?=啊)/g;reg.exec(str);//["好", index: 5, input: "你好嗎 你好啊 你好呀"]reg.exec(str);//nullreg = /好(?!啊)/;reg.exec(str);//["好", index: 1, input: "你好嗎 你好啊 你好呀"]reg.exec(str);//["好", index: 9, input: "你好嗎 你好啊 你好呀"]reg.exec(str);//null//說明一下零寬,下面這個正則表示`你`的後面要緊跟著`好`才能匹配,期望後面是`好`!//但是後面緊跟著一個`\d`,理解的時候把`(?=好)`忽略(因為是零寬,不佔據位置),//這就表示在`你`的後面要跟一個數字才能匹配,這就跟上面那個期望相互矛盾,//因此這個正則不會匹配任何字串。reg = /你(?=好)\d/;reg.exec(str);//nullreg.test(str);//falsereg.test(‘你好‘);//falsereg.test(‘你好1‘);//falsereg.test(‘你1好‘);//false

 

再看`/\B(?=(?:\d{3})+\b)/g`什麼意思
1. 首先是全域匹配
2. 匹配非單詞邊界
3. 非單詞邊界後面有(連續3的整數被個數字加單詞邊界)
4. 連續的數字不會被捕獲
`‘123456789‘.replace(/\B(?=(?:\d{3})+\b)/g, ‘,‘)`
執行過程:
replace函數會進行多次匹配,\b表示了要匹配到單詞邊界。
1. 首先從1和2中間開始但是後面有8個數字不滿足前瞻性條件
2. 然後到2和3中間,同樣不滿足
3. 到3和4中間,滿足後面有6個數字
4. 把在3和4中間的\B(非單詞邊界)替換為","。
5. 依次往下匹配替換
6. 最終返回新的字串"123,456,789"

正則很強大,比常規的實現方法簡潔方便很多。

javascript 正則(將數字轉化為三位分隔的樣式)【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.