Question JavaScript test () enregistre-t-il l'état dans le regex? [dupliquer]


Cette question a déjà une réponse ici:

Ouvrez une console de navigateur et exécutez le code suivant:

var foo = /foo/g;

Alors,

foo.test("foo") // true

Alors,

foo.test("foo") // false

Si vous continuez à exécuter foo.test ("foo"), vous verrez des réponses vraies / fausses en alternance comme si le foo var était en train d'être modifié.

quelquun sait pourquoi cela se passe?


10
2018-03-07 16:45


origine


Réponses:


Oui, c'est comme ça .test() et .exec() travailler quand le regex est g global. Ils commencent à la fin du dernier match.

Vous pouvez observer le dernier index actuel sur l'objet d'expression régulière en utilisant le .lastIndex propriété.

C'est une propriété accessible en écriture, vous pouvez donc la réinitialiser à 0 quand / si vous avez besoin Lorsque le regex est exécuté sans trouver de correspondance, il se réinitialise automatiquement à 0.


11
2018-03-07 16:46



La regex conserve la position du dernier test. Cela permet de rechercher de longues chaînes. Vous pouvez réinitialiser cela en définissant lastIndex = 0;


1
2018-03-07 16:48