TableSorter自定义分析器

时间:2011-03-16 16:28:17

标签: javascript jquery regex tablesorter

我正在尝试对“200.32 M”或“800.80 B”

等值进行排序

我正在使用的当前方法无法解决。有谁熟悉这个?

ts.addParser({  
    id: 'mktcap', 
    is: function(s) { 
        return false;   
    }, 
    format: function(s) {   
        return s.replace(/M/,s+1000000).replace(/B/,s+1000000000); 
    },   
    type: "numeric"   
}); 

3 个答案:

答案 0 :(得分:0)

s.replace(/M/,s+1000000)看起来很奇怪 请尝试使用此MB等相同。)

var s = "200.32 M";
s = eval(s.replace(/ M/, " * 1000000"));
// s = 200320000

var s = "800.80 B";
s = eval(s.replace(/ B/, " * 1000000000"));
// s = 800800000000

答案 1 :(得分:0)

我确信s.replace(/M/,s+1000000)不会做你期望的事。最好的情况是,你最终会得到一个像“200.32 1000200.32”这样的字符串。我会检查M,将其剥离,将字符串转换为数字,然后添加/乘以适当的值。像这样......

var str = "200.32 M";
var tokenM = " M";
var num;

if(str.indexOf(tokenM) == (str.length - tokenM.length)) { // Ends with " M"?
  str = str.replace(new RegExp(tokenM), "");
  num = parseFloat(str) + 1000000;
}

答案 2 :(得分:0)

var s= "200.32 M" ;

var rx=/((\.\d+)|(\d+(\.\d+)?))\s*([MB])?/;
var P= rx.exec(s), value, x, 
mult={M:1000000,B:1000000000,O:1};

if(P){
    value= P[1];
    x=P[5] || O;
    value*=mult[x];
}
alert(value)

/ *返回值:(Number) 200320000 * /