Rumah >hujung hadapan web >tutorial js >Mengapa Bendera Global dalam RegExp Menghasilkan Keputusan Tidak Dijangka dengan Pelbagai Ujian?
Ungkapan biasa (RegExps) dengan bendera global (g) biasanya digunakan untuk mencari kemunculan berbilang corak dalam seutas tali. Walau bagaimanapun, menggunakan bendera ini bersama-sama dengan bendera tidak peka huruf besar-besaran (i) boleh membawa kepada hasil yang tidak dijangka.
Pertimbangkan contoh berikut:
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]
Dalam senario ini, kaedah ujian hanya kembali benar dalam lelaran pertama. Untuk memahami tingkah laku ini, kita perlu mempertimbangkan cara bendera g berfungsi.
Apabila digunakan dengan bendera g, objek RegExp menjejaki indeks terakhir tempat perlawanan berlaku. Pada perlawanan berikutnya, RegExp akan mula mencari dari indeks terakhir ini dan bukannya 0.
Menggambarkan konsep ini:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); // Initial value is 0 console.log(re.test('Foo Bar')); // Matches at index 0 console.log(re.lastIndex); // Updated to 6 console.log(re.test('Foo Bar')); // No match, lastIndex is still 6 console.log(re.lastIndex); // Remains at 6
Dalam contoh ini, walaupun rentetan Foo Bar mengandungi padanan lain, panggilan ujian kedua mengembalikan palsu kerana RegExp telah mengalihkan kedudukan cariannya melepasi perlawanan.
Oleh itu, menggunakan bendera g bersempena dengan bendera i boleh mengakibatkan padanan terlepas jika rentetan carian mengandungi berbilang contoh corak dengan kes yang berbeza-beza. Untuk mengelakkan ini, pertimbangkan untuk menggunakan bendera i tanpa bendera g atau menggunakan satu panggilan ujian dengan bendera g untuk mencari padanan pertama sahaja.
Atas ialah kandungan terperinci Mengapa Bendera Global dalam RegExp Menghasilkan Keputusan Tidak Dijangka dengan Pelbagai Ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!