mbe*_*ley 7 javascript regex jquery contains
我正在使用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));
}
});
Run Code Online (Sandbox Code Playgroud)
我有一个表格,我正在尝试有条件地格式化某些单元格,所以我在td选择器中使用该containsRegex函数的扩展.我快到的问题是,很多,我试图用(我已经对JavaScript的正则表达式测试仪测试一样从正则表达式这和他们为之奋斗)不使用此功能工作.这些是我想要匹配的各种字符串:
注意,"x"可以是ax,t,f或v,"X"可以是X,T,F或V.最后,"(mb)"可以是括号中的任何两个小写字母az.
- ,(mb),x*,x*(mb),x,x(mb),X*,X*(mb),X
以下是我正在使用的几个正则表达式语句的代码:
$("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
Run Code Online (Sandbox Code Playgroud)
其中大多数都会在Chrome中传递错误.有没有人有任何指针?包含扩展名是否受限制?
在此先感谢您的帮助!
好吧,我想我明白了......这些是我做的改变:
我通过在返回中添加"reg"检查来更改containsRegex,使其更加坚固:
containsRegex: function(a,i,m){
var regreg = /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})$/,
reg = regreg.exec(m[3]);
return reg ? RegExp(reg[1], reg[2]).test($.trim(a.innerHTML)) : false;
}
Run Code Online (Sandbox Code Playgroud)正则表达式中的所有转义字符都需要双重转义(即\(需要\\()
我删除了所有单引号,以帮助我分心
我删除了班级名称号码.我知道ID不应该从数字开始,我很确定类名不应该开始或只是一个数字.无论如何,这导致一些选择器添加相同的正则表达式(即"x"和" - "看起来相同,以及"x*(mb)"和"X*(mb)"与演示中的css).
无论如何,我将使用此代码和您的演示更新我的要点:
/* jQuery selector to match exact text inside an element
* :containsExact() - case insensitive
* :containsExactCase() - case sensitive
* :containsRegex() - set by user ( use: $(el).find(':containsRegex(/(red|blue|yellow)/gi)') )
*/
$.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 reg ? RegExp(reg[1], reg[2]).test($.trim(a.innerHTML)) : false;
}
});
// -, (mb), x*, x*(mb), x, x(mb), X*, X*(mb), X
$("td:containsRegex(/^[xtfv]$/)").addClass("queue"); // x
$("td:containsRegex(/^[xtfv]\\*$/)").addClass("queue review"); // x*
$("td:containsRegex(/^\\([a-z]{2}\\)$/)").addClass("active"); // (mb)
$("td:containsRegex(/^[xtfv]\\([a-z]{2}\\)$/)").addClass("active"); // x(mb)
$("td:containsRegex(/^[xtfv]\\*\\([a-z]{2}\\)$/)").addClass("active review"); // x*(mb)
$("td:containsRegex(/^[XTFV]$/)").addClass("done"); // X
$("td:containsRegex(/^[XTFV]\\*$/)").addClass("queue review"); // X*
$("td:containsRegex(/^[XTFV]\\*\\([a-z]{2}\\)$/)").addClass("active review"); // X*(mb)
$("td:containsExact(-)").addClass("queue"); // -
Run Code Online (Sandbox Code Playgroud)