Rumah  >  Soal Jawab  >  teks badan

Mengapakah ungkapan biasa untuk bendera global menyebabkan output yang salah?

<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>
P粉282627613P粉282627613424 hari yang lalu488

membalas semua(2)saya akan balas

  • P粉399090746

    P粉3990907462023-08-23 00:35:02

    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:

    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));

    balas
    0
  • P粉523335026

    P粉5233350262023-08-23 00:21:13

    Digunakan dengan g 标志的 RegExp 对象会跟踪匹配发生的 lastIndex jadi 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);

    balas
    0
  • Batalbalas