为什么会找到相匹配的结果,而测试在JavaScript正则表达式返回false?

StackOverflow https://stackoverflow.com/questions/883625

  •  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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top