У меня есть такая таблица, которую я хочу отсортировать:
| Имя | Дело |
| Джон | Х-123/08 П|
| Боб | Х-123/09 |
| Дилан | Х-45/10 |
Я хочу отсортировать столбец дела по году дела, а затем по номеру дела, зная, что формат всегда «X- (от 1 до 4 цифр для номера дела)/(год дела на 2 цифрах) (иногда некоторый текст)». Возможно, после случая года у меня есть какой-то текст, но его следует игнорировать при сортировке.
Я использую плагин tablesorter jQuery, и я изо всех сил пытаюсь добавить для этого собственный синтаксический анализатор.
Спасибо за вашу помощь !
РЕДАКТИРОВАТЬ: Вот что я пытаюсь сделать:
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 считает, что 488 000 10 меньше, чем 49 000 10 ?!