【发布时间】:2012-02-13 10:01:57
【问题描述】:
我正在使用 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 函数。我遇到的问题是我尝试使用的许多正则表达式(我已经在 this 这样的 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
Chrome 中的大多数此类通过错误。有没有人有任何指示?包含扩展名是否受到某种限制?
提前感谢您的帮助!
【问题讨论】:
-
供参考:它传递的错误是“x*”和“X*”上的“Uncaught Syntax error, unrecognized expression: )/g')”。它适当地将类应用于“(mb)”,但也将这些相同的类应用于“x *(mb)”......其余的搜索不会传递错误,但它们也找不到匹配项。跨度>
标签: javascript jquery regex contains