2009-05-19 75 views
0

我試圖調試一個排序問題與jQuery插件的tablesorter它使用下面的代碼來檢查數字:爲什麼會匹配找到一個結果,而測試在JavaScript中爲正則表達式返回false?

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',則失敗,但如果您運行匹配,則RegEx會按預期正向響應。

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 

回答

1

我覺得這有點奇怪的巧合,因爲用來構造正則表達式的函數。

Match是String的成員。

測試是RegExp的成員。

但是,在那裏的函數中,exp被定義爲一個字符串。因此,從技術上講,您使用exp作爲字符串值運行String的match(),而不是正則表達式。

通過RegExp構造函數運行exp應該返回與test()相同的結果。

1

匹配返回值的陣列,測試返回布爾值,在某些發動機測試返回第一結果

+0

好的,但爲什麼當匹配似乎工作時測試不會返回true? – catalpa 2009-05-19 16:03:39

0

原來,這是相應對象的逆轉。

return exp.match($.trim(s)) != null 

應該

return $.trim(s).match(exp) != null 

原代碼只是檢查「0」的正則表達式字符串

似乎仍然是一個的tablesorter存在錯誤。如果表中存在0值,則必須將解析器聲明爲「數字」。 JQuery tablesorter problem

相關問題