Mengapakah ungkapan biasa untuk bendera global menyebabkan output yang salah?
P粉282627613
P粉282627613 2023-08-22 19:11:39
0
2
467

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].

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]

var reg = /^a$/g; untuk(i = 0; i++ < 10;) console.log(reg.test("a"));

P粉282627613
P粉282627613

membalas semua (2)
P粉399090746

Anda menggunakan objekRegExpdan melaksanakannya beberapa kali. Pada setiap pelaksanaan, ia diteruskan dari indeks padanan terakhir.

Sebelum setiap pelaksanaan, anda perlu "set semula" regex untuk bermula dari awal:

result.push(re.test('Foo Bar')); re.lastIndex = 0; result.push(re.test('Foo Bar')); // 现在的结果是 [true, true]

Apa yang dikatakan, mungkin lebih mudah dibaca untuk mencipta objek RegExp baharu setiap kali (overhead sedikit kerana RegExp sudah dicache):

result.push((/Foo B/gi).test(stringA)); result.push((/Foo B/gi).test(stringB));
    P粉523335026

    Digunakan dengang标志的RegExp对象会跟踪匹配发生的lastIndexjadi dalam perlawanan seterusnya ia akan bermula dari indeks terakhir digunakan dan bukannya bermula dari 0. Lihat contoh:

    var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); console.log(re.test('Foo Bar')); console.log(re.lastIndex); console.log(re.test('Foo Bar')); console.log(re.lastIndex);
      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!