Javascript 如何使用jQuery Tablesorter插件解析复杂字符串?

Javascript 如何使用jQuery Tablesorter插件解析复杂字符串?,javascript,jquery,tablesorter,Javascript,Jquery,Tablesorter,我有一张这样的桌子,我想分类: |名称|大小写| |约翰| X-123/08 P | |鲍勃| X-123/09 | |迪伦| X-45/10| 我想按案例年份对案例列进行排序,然后根据案例编号对案例列进行排序,知道格式始终是“X-(案例编号为1到4位)/(案例年份为2位)(有时是一些文本)”。这是可能的,在一年的情况下,我有一些文字,但它应该被忽略排序 我正在使用TableSorterjQuery的插件,我正在努力为此添加一个自定义解析器 谢谢你的帮助 编辑:以下是我想做的: jQuery.t

我有一张这样的桌子,我想分类:
|名称|大小写|
|约翰| X-123/08 P |
|鲍勃| X-123/09 |
|迪伦| X-45/10|

我想按案例年份对案例列进行排序,然后根据案例编号对案例列进行排序,知道格式始终是“X-(案例编号为1到4位)/(案例年份为2位)(有时是一些文本)”。这是可能的,在一年的情况下,我有一些文字,但它应该被忽略排序

我正在使用TableSorterjQuery的插件,我正在努力为此添加一个自定义解析器

谢谢你的帮助

编辑:以下是我想做的:

jQuery.tablesorter.addParser({ 
                // set a unique id 
                id: 'case', 
                is: function(s) { 
                    return false; 
                }, 
                format: function(s) { 
                    // format your data for normalization 
                    return s.replace(/^X-\d{1,4}\/(\d{2}).*$/, '$1') + ('000' + s.replace(/^X-(\d{1,4})\/\d{2}.*$/, '$1')).substr(-4);
                }, 
                // set type, either numeric or text 
                type: 'text'
            }); 
这是伟大的工作,直到我遇到一个案件,2位,然后排名大于3位,我不明白为什么。。。 “X-458/09 P”的排序小于“X-48/09”。我将尝试一些调试,看看到底发生了什么

编辑2:还尝试了第二个答案:

jQuery.tablesorter.addParser({ 
                // set a unique id 
                id: 'case', 
                is: function(s) { 
                    return false; 
                }, 
                format: function(s) { 
                    var m = s.match(/X\-(\d+)\/(\d{2}).*$/);
                    var affaire = m[1];
                    var year = m[2];
                    return year + '000' + affaire;
                }, 
                // set type, either numeric or text 
                type: 'text'
            }); 
结果似乎和第一个一样。。。我真的不明白为什么这么糟糕。为什么tablesorter认为488000 10比49000 10小

我认为您可以使用:

$.tablesorter.addParser({ 
    // set a unique id 
    id: 'case', 
    is: function(s) { 
        // return false so this parser is not auto detected 
        return false; 
    }, 
    format: function(s) { 
        // format your data for normalization 
        return s.replace(/^X-\d{1,4}\/(\d{2}).*$/, '$1') + ('000' + s.replace(/^X-(\d{1,4})\/\d{2}.*$/, '$1')).slice(-4);
    }, 
    // set type, either numeric or text 
    type: 'text'
}); 
编辑:

也许您已经尝试过类似的
类型:'numeric'
;我不确定,但这可能会失败,因为
parseInt('09')==0

编辑2:


更改为按年份排序,然后按案例编号排序。

您可以使用正则表达式获取所需的2个值,例如:

var columnVal = "X-123/08";
var m = columnVal.match(/X\-(\d+)\/(\d{2})$/);
var case = m[1];
var year = m[2];

在尝试了多种方法后,这一方法似乎效果很好:

jQuery.tablesorter.addParser({ 
                // set a unique id 
                id: 'case', 
                is: function(s) { 
                    return false; 
                }, 
                format: function(s) { 
                    var m = s.match(/X\-(\d+)\/(\d{2}).*$/);
                    var caseVar = '000' + m[1];
                    var size = caseVar.length;
                    caseVar= caseVar.substr(size-4, 4);
                    var year = m[2];
                    return jQuery.tablesorter.formatFloat(year + caseVar);
                }, 
                // set type, either numeric or text 
                type: 'numeric'
            }); 
我做了一些研究,发现substr函数的负值并不能在所有浏览器上都起作用(我使用IE,因为我的应用程序必须符合IE)。我想这就是我以前遇到的问题的原因,也是Spiny的解决方案不适合我的原因


无论如何,谢谢你们所有人的宝贵帮助

我已经试过了,但似乎不起作用=(我试过数字和文本。我在问题的描述中添加了一些东西,也许这就是原因。.有时一些文本,嗯?:)试着在结尾的
$
之前添加
*
?这行得通吗?是的,有些文字是这样写的:“X-123/07 PRU”或“X-54/11 P(C)”通常只是几个字母,不应该在排序过程中考虑它们。我尝试了.*,但仍然没有机会。好的,可以肯定的是:你确实添加了<代码> $(“表”)。tablesorter({标题:{ 1:{Salter:‘Case}}});<代码>或者什么的,对吗?因为“X-54/11 P(C)”.replace(/^X-\d{1,4}\/(\d{2})。*$/,“$1”)在我的控制台中返回“11”。。。是否确实调用了format函数?可能在那里添加一些调试代码,或者只是
警报;警报(s.replace(/^X-\d{1,4}\/(\d{2})。*$/,“$1”)?调用了解析器,我已经做了一些调试来检查它。当我尝试一个警报(…)时,年份确实返回得很好,但我想要的是按年份排序,然后按案例编号排序(一年内)=/