Pourquoi correspondrait à trouver un résultat tout test renvoie faux pour une expression régulière en JavaScript?

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

  •  22-08-2019
  •  | 
  •  

Question

Je suis en train de déboguer un problème de tri avec le plugin jquery tablesorter qui utilise le code suivant pour vérifier les chiffres:

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

la valeur est config.decimal ''

Maintenant, si s = « 0 » échec, mais si vous exécutez correspondance à la place le RegEx semble réagir positivement comme prévu.

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

Comment ce traitement est différent pour retourner des résultats différents?

Juste au cas où vous vouliez le code HTML où s est dérivé (La dernière colonne est considéré comme texte):

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

Je comprends ce test renvoie une valeur booléenne et correspondance renvoie une chaîne ou une valeur nulle.

La question ultime est pourquoi pas cette expression régulière:

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

équivalent à:

return exp.match($.trim(s)) != null
Était-ce utile?

La solution

Je pense qu'il est un peu d'une coïncidence étrange en raison de la fonction utilisée pour construire l'expression régulière.

Match est un membre de la chaîne.

Test est un membre de RegExp.

Cependant, dans la fonction y, exp est défini comme une chaîne. Donc, techniquement, vous utilisez le match String () en utilisant exp comme une valeur de chaîne, non pas comme une expression régulière.

Exécution exp par un constructeur RegExp doit retourner le même résultat que le test () serait.

Autres conseils

retourne correspondent tableau de valeurs, test renvoie booléen, sur certains tests du moteur retourne premier résultat

Il s'avère que c'est un renversement des objets appropriés.

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

doit être

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

Le code original a été en train de vérifier que "0" existait dans la chaîne de RegEx

semble encore être un bogue dans tablesorter. Vous devez déclarer l'analyseur comme « chiffres » si 0 valeurs sont présentes dans votre table. JQuery problème tablesorter

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top