Mengapakah ungkapan biasa untuk bendera global menyebabkan output yang salah?
P粉282627613
2023-08-22 19:11:39
<p>Apakah yang salah dengan regex ini apabila saya menggunakan bendera global dan bendera tidak sensitif huruf besar-besaran? Pertanyaan ialah input yang dijana pengguna. Hasilnya sepatutnya [benar, benar]. </p>
<pre class="brush:php;toolbar:false;">var query = 'Foo B';
var re = new RegExp(query, 'gi');
var hasil = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
//Hasilnya ialah [true, false]</pre>
<hr>
<p>
<pre class="snippet-code-js lang-js prettyprint-override"><code>var reg = /^a$/g;
untuk(i = 0; i++ < 10;)
console.log(reg.test("a"));</code></pre>
</p>
Anda menggunakan objek
RegExp
dan melaksanakannya beberapa kali. Pada setiap pelaksanaan, ia diteruskan dari indeks padanan terakhir.Sebelum setiap pelaksanaan, anda perlu "set semula" regex untuk bermula dari awal:
Apa yang dikatakan, mungkin lebih mudah dibaca untuk mencipta objek RegExp baharu setiap kali (overhead sedikit kerana RegExp sudah dicache):
Digunakan dengan
g
标志的RegExp
对象会跟踪匹配发生的lastIndex
jadi dalam perlawanan seterusnya ia akan bermula dari indeks terakhir digunakan dan bukannya bermula dari 0. Lihat contoh: