Maison >interface Web >js tutoriel >Pourquoi la méthode `test()` de RegExp renvoie-t-elle des résultats inattendus avec des indicateurs globaux et insensibles à la casse ?
Question :
Lors de l'utilisation d'une expression régulière avec le l'indicateur global (g) et l'indicateur insensible à la casse (i), pourquoi la méthode de test produit-elle des résultats incorrects pour les erreurs générées par l'utilisateur ? entrée ?
Exemple :
Considérez le code suivant :
var query = 'Foo B'; var re = new RegExp(query, 'gi'); var result = []; result.push(re.test('Foo Bar')); result.push(re.test('Foo Bar')); // result will be [true, false]
Résultat attendu : [vrai, vrai]
Explication :
Un objet RegExp avec le drapeau g maintient la propriété lastIndex, indiquant la position de la dernière correspondance. Lorsque la méthode de test est appelée à plusieurs reprises sans réinitialiser lastIndex, elle reprendra la recherche à partir du dernier index utilisé plutôt que de repartir de 0.
Démonstration :
var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); // 0 console.log(re.test('Foo Bar')); // true console.log(re.lastIndex); // 6 console.log(re.test('Foo Bar')); // false console.log(re.lastIndex); // 6
Dans l'exemple ci-dessus, le premier appel à test définit lastIndex sur 6. Par la suite, le deuxième appel reprend la recherche à partir de l'index 6, ce qui donne la valeur false car la portée de la recherche est limitée à l'index 6. personnages suite au dernier match.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!