Warum passen würde ein Ergebnis finden, während Test für einen regulären Ausdruck in JavaScript false zurückgibt?

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

  •  22-08-2019
  •  | 
  •  

Frage

Ich habe versucht, ein Sortier Problem mit der jQuery-Plugin zu debuggen tablesorter , die den folgenden Code verwendet für die Ziffern zu überprüfen:

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));
            };

der Wert für config.decimal ist ''

Nun, wenn s = ‚0‘ das nicht klappt, aber wenn Sie Spiel laufen stattdessen erscheint der RegEx reagiert werden positiv wie erwartet.

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

Wie ist diese Verarbeitung unterschiedlich, um unterschiedliche Ergebnisse zurück?

Nur falls Sie die HTML wollten, wo s abgeleitet (Die letzte Spalte wird als Text angezeigt):

<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>

Ich verstehe, dass Test gibt einen booleschen Wert und Spiel einen String oder null zurückgibt.

Die ultimative Frage ist, warum ist nicht für diesen regulären Ausdruck:

return RegExp(exp).test($.trim(s));

äquivalent zu:

return exp.match($.trim(s)) != null
War es hilfreich?

Lösung

Ich denke, es ist ein bisschen ein seltsamer Zufall ist aufgrund der Funktion des regulären Ausdrucks zu konstruieren.

Match ist ein Mitglied des String.

Test ist Teil des RegExp.

Es gibt jedoch in der Funktion exp wird als String definiert. Also, technisch gesehen, du läufst String Begegnung () exp als String-Wert verwendet wird, nicht als regulärer Ausdruck.

exp durch einen RegExp Konstruktor ausgeführt wird, soll das gleiche Ergebnis wie Test () zurückgeben würde.

Andere Tipps

Spiel kehren Array von Werten, Test ist boolean, auf einigen Motortest liefert erstes Ergebnis

Es stellte sich heraus, dass es eine Umkehrung der entsprechenden Objekte ist.

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

sollte

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

Der ursprüngliche Code nur war die Überprüfung, dass "0" in der RegEx String existiert

scheint immer noch ein Fehler in tablesorter zu sein. Sie haben den Parser als ‚Ziffer‘ zu erklären, wenn 0 Werte in der Tabelle vorhanden sind. JQuery tablesorter Problem

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top