なぜテストは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>
私は、そのテストはブール値を返し、試合は、文字列またはnullを返します理解します。
究極の疑問は、なぜこの正規表現ではありません。
return RegExp(exp).test($.trim(s));
と同等ます:
return exp.match($.trim(s)) != null
解決
私はそれが正規表現を構築するために使用される機能のために奇数偶然のビットだと思います。
マッチは文字列のメンバーです。
試験正規表現のメンバーである。
しかし、そこ関数で、EXPは、文字列として定義されます。だから、技術的に、あなたがいない正規表現として、文字列値としてEXPを使用して()文字列の一致を実行している。
のRegExpコンストラクタでEXPを実行する)(テストと同じ結果を返す必要があります。
他のヒント
マッチ戻りアレイは、テストはブール値を返し、いくつかのエンジンテストは最初の結果を返すの
それが適切なオブジェクトの反転だが判明します。
return exp.match($.trim(s)) != null
でなければなりません。
return $.trim(s).match(exp) != null
元のコードは、単に「0」が正規表現文字列に存在していることを確認しました。
まだtablesorterのバグのようです。あなたは0の値は、あなたのテーブルに存在している場合は、「数字」としてパーサを宣言する必要があります。 jQueryのtablesorter問題の