Я использую расширение для jQuery "contains", показанное ниже:
$.extend($.expr[':'],{
containsExact: function(a,i,m){
return $.trim(a.innerHTML.toLowerCase()) === m[3].toLowerCase();
},
containsExactCase: function(a,i,m){
return $.trim(a.innerHTML) === m[3];
},
containsRegex: function(a,i,m){
var regreg = /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})$/,
reg = regreg.exec(m[3]);
return RegExp(reg[1], reg[2]).test($.trim(a.innerHTML));
}
});
У меня есть таблица с определенными ячейками, которые я пытаюсь условно отформатировать, поэтому я использую расширение в селекторе td
с функцией containsRegex
. Проблема, с которой я столкнулся, заключается в том, что многие регулярные выражения, которые я пытаюсь использовать (которые я тестировал на javascript regex-тестерах, таких как this, и они работали), не работают с этой функцией. Вот различные строки, которые я хотел бы подобрать:
Обратите внимание, что "x" может быть x,t,f или v, а "X" может быть X,T,F или V. Наконец, "(mb)" может быть любыми двумя строчными буквами a-z в скобках.
-, (mb), x*, x*(mb), x, x(mb), X*, X*(mb), X
А вот код с несколькими операторами regex, которые я использую:
$("td:containsExact('-')").addClass("0 queue"); // -
$("td:containsRegex('/[^xtfv*]\([a-z]{2}\)/g')").addClass("1 active"); // (mb)
$("td:containsRegex('/\b[xtfv]\*(?!\()/g')").addClass("2 queue review"); // x*
$("td:containsRegex('/\b[xtfv]\*(?:\([a-z]{2}\))/g')").addClass("3 active review"); // x*(mb)
$("td:containsRegEx('/\b[xtfv](?![*\(])/g')").addClass("4 queue"); // x
$("td:containsRegEx('/\b[xtfv](?:\([a-z]{2}\))/g')").addClass("5 active"); // x(mb)
$("td:containsRegEx('/\b[XTFV]\*(?!\()/g')").addClass("6 queue review"); // X*
$("td:containsRegEx('/\b[XTFV]\*(?:\([a-z]{2}\))/g')").addClass("7 active review"); // X*(mb)
$("td:containsRegEx('/\b[XTFV](?![*\(])/g')").addClass("8 done"); // X
Большинство из них выдают ошибки в Chrome. Есть ли у кого-нибудь какие-нибудь подсказки? Может быть, расширение contains как-то ограничено?
Заранее спасибо за помощь!