[JavaScript] 千分位

  • 5897
  • 0
  • 2009-09-10

摘要:[JavaScript] 千分位

function wl(s){document.write(s+"<br>");}
var normalNum='12345678987654321';
var kukuNum='134123142133894329AAA8539807831278187938';

function format1(num){
    num = num.toString();
    var re=/(-?\d+)(\d{3})/;
    while(re.test(num)){
  num=num.replace(re,"$1,$2");
    }

    return num;
}

wl('function');
wl(format1(normalNum));
wl(format1(kukuNum));

var re1 =/(\d{1,3})(?=(\d{3})+[^\d])/g;
//(\d{1,3}) 如果 1~3個數字後面跟著..(?=(\d{3})+[^\d]) 1組以上的(3個數字),一直抓到非數字結尾..就抓出來

wl('re1='+re1);
wl(normalNum.replace(re1,"$1,"));//數字結尾就炸了。
wl(kukuNum.replace(re1,"$1,"));

var re2=/(\d{1,3})(?=(\d{3})+(?:$|\.))/g;
wl('re2='+re2);
wl(normalNum.replace(re2,"$1,"));
wl(kukuNum.replace(re2,"$1,"));

var re3=/(\d{1,3})(?=(\d{3})+(?:$|[^\d]))/g;
wl('re3='+re3);
wl(normalNum.replace(re3,"$1,"));
wl(kukuNum.replace(re3,"$1,"));

JS regex符號對照表

(?:x) 比對 'x' 但不記憶此項比對結果。又稱為非截取括弧。比對出來的子字串無法從比對結果的陣列的元素 [1], ..., [n] 取回。
x(?=y) 比對 'x' 但只在 'x' 後面接續著 'y' 的時候。舉例來說,/Jack(?=Sprat)/ 只在後面接續著 'Sprat' 的時候比對出 'Jack'。/Jack(?=Sprat|Frost)/ 只在後面接續著 'Sprat' 或 'Frost' 的時候比對出 'Jack'。然而,'Sprat' 或 'Frost' 都不是比對結果的一部分。
x(?!y) 比對 'x' 但只在 'x' 後面沒有接續著 'y' 的時候。舉例來說,/\d+(?!\.)/ 只在後面沒有接續著小數點的時候比對出數字。正規表達式 /\d+(?!\.)/.exec("3.141") 比對出 '141' 而非 '3.141'。