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 ?

Pourquoi la méthode `test()` de RegExp renvoie-t-elle des résultats inattendus avec des indicateurs globaux et insensibles à la casse ?

Barbara Streisand
Libérer: 2024-12-24 20:37:17
original
281 Les gens l'ont consulté

Why Does RegExp's `test()` Method Return Unexpected Results with Global and Case-Insensitive Flags?

RegExp avec l'indicateur global et l'indicateur insensible à la casse donne des résultats inattendus

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]
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal