为什么会找到相匹配的结果,而测试在JavaScript正则表达式返回false?
-
22-08-2019 - |
题
我试图调试与jquery插件的tablesorter 其中使用以下代码来检查数字的排序问题:
this.isDigit = function(s,config) {
var DECIMAL = '\\' + config.decimal;
var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';
return RegExp(exp).test($.trim(s));
};
有config.decimal的值是 ''
现在如果s =“0”失败,但是如果运行匹配而不是正则表达式显示为有望得到积极响应。
return exp.match($.trim(s)) != null
这是如何处理不同的,以便返回不同的结果?
万一你想其中S是衍生(的最后一列被视为文本)的HTML:
<tr class="">
<td><a href="#">Click</a></td>
<td>Annen Woods</td>
<td>131</td>
<td>20</td>
<td>5</td>
<td>3</td>
<td>12</td>
<td>6</td>
<td>50%</td>
<td>0</td>
</tr>
据我所知,测试返回一个布尔值和匹配返回一个字符串或空值。
最终的问题是为什么不是此正则表达式:
return RegExp(exp).test($.trim(s));
等同于:
return exp.match($.trim(s)) != null
解决方案
我认为这是一个比特的奇数重合由于用于构造正则表达式的功能。
匹配是字符串的成员。
测试是正则表达式中的一员。
然而,在功能那里,EXP被定义为一个字符串。因此,从技术上说,你正在运行字符串的匹配()用exp作为一个字符串值,而不是一个正则表达式。
通过正则表达式构造运行EXP应返回相同的结果作为试验()将。
其他提示
匹配返回值的阵列,测试返回布尔值,在某些发动机测试返回第一结果
原来这是适当的对象的逆转。
return exp.match($.trim(s)) != null
应
return $.trim(s).match(exp) != null
在原始代码只是检查该“0”,在正则表达式的字符串存在
似乎仍然是在的tablesorter的一个错误。您必须声明解析器为“数字”,如果0值出现在表格中。 JQuery的问题的tablesorter
不隶属于 StackOverflow