Pourquoi les expressions régulières pour les indicateurs globaux entraînent-elles un résultat incorrect ?
P粉282627613
2023-08-22 19:11:39
<p>Qu'est-ce qui ne va pas avec cette expression régulière lorsque j'utilise des indicateurs globaux et des indicateurs insensibles à la casse ? Les requêtes sont des entrées générées par l'utilisateur. Le résultat devrait être [vrai, vrai]. </p>
<pre class="brush:php;toolbar:false;">var query = 'Foo B';
var re = new RegExp(query, 'gi');
var résultat = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
//Le résultat sera [true, false]</pre>
<hr>
<p>
<pre class="snippet-code-js lang-js Prettyprint-override"><code>var reg = /^a$/g;
pour(i = 0; i++ < 10;)
console.log(reg.test("a"));</code></pre>
</p>
Vous utilisez un objet
RegExp
et vous l'exécutez plusieurs fois. A chaque exécution, il continue à partir du dernier index correspondant.Avant chaque exécution, vous devez "réinitialiser" la regex pour repartir de zéro :
Cela étant dit, il pourrait être plus lisible de créer un nouvel objet RegExp à chaque fois (peu de surcharge puisque le RegExp est déjà mis en cache) :
Utilisé avec
g
标志的RegExp
对象会跟踪匹配发生的lastIndex
donc lors des matchs suivants, il commencera à partir du dernier index utilisé plutôt que de partir de 0. Jetez un œil à un exemple :