例如:
1234567 ==> 1,234,456
發現原來正規表示法也可以辦到,特別在這邊做個紀錄。
以Javascript為例,以下的方法numberWithCommas()可以將輸入的整數字串每隔3位數標上逗號
function numberWithCommas(x) { return x.replace(/\B(?=(\d{3})+(?!\d))/g, ","); }
使用的正規表示法為
\B(?=(\d{3})+(?!\d))
先來看看它的圖型化表示
圖型化表示連結
解釋:
我們要匹配的是從低位數數起,每三個位數的位置(是位置,不是字元),但不包括左邊沒數字的位置,
例如123456789,匹配的位置有
3跟4這間、6跟7中間,但1左邊不應該要有。
\B : 非字元邊界,在此列中即左邊不應該有空白
x(?=y) : x接著y才匹配成功,並且y不列入匹配成功的字串中,只匹配出x,如果x沒寫,則 匹配出來的為位置
\d{3} : 3個數字字元
x(?!y) : x後面不跟著y才匹配成功
所以組合出來的就是
- 左邊不要空格(即不要左邊界) ==> \B
- 比對後面符合我們要的條件的位置 ==> \B(?=)
- 條件之一,1到多個的,3個為一組的數字字元 ==> \B(?=(\d{3})+)
- 條件之二,條件之一的最後面不可是數字字元 ==> \B(?=(\d{3})+(?!\d))
沒有留言 :
張貼留言