Mengapa bahagian atas adalah fasle dan bahagian bawah adalah benar
var re = null ,result ,i;
for (i=0; i < 10; i++){
re = new RegExp("cat", "g");
re.test("catastrophe");
console.log(re.test("catastrophe")); //false
result = re.test("catastrophe");
console.log(result); //true
}
Petikan berikut adalah daripada http://www.w3school.com.cn/js...
Harta JavaScript lastIndex
objek RegExp JavaScript
Definisi dan penggunaan
Harta lastIndex digunakan untuk menentukan kedudukan permulaan perlawanan seterusnya.
Syntax
RegExpObject.lastIndex
Description
Atribut ini menyimpan integer, yang mengisytiharkan kedudukan aksara pertama selepas teks dipadankan terakhir.
Hasil padanan terakhir ditemui oleh kaedah RegExp.exec() dan RegExp.test(), yang kedua-duanya menggunakan kedudukan yang ditunjuk oleh atribut lastIndex sebagai titik permulaan untuk pengambilan seterusnya. Dengan cara ini, anda boleh lelaran melalui semua teks yang sepadan dalam rentetan dengan memanggil dua kaedah ini berulang kali.
Harta ini boleh dibaca dan ditulis. Ia boleh ditetapkan apabila carian seterusnya untuk rentetan sasaran bermula. Apabila kaedah exec() atau test() tidak lagi dapat mencari teks yang sepadan, mereka secara automatik menetapkan semula sifat lastIndex kepada 0.
Petua dan Nota
Penting: Objek RegExp yang tidak mempunyai bendera g dan tidak mewakili mod global tidak boleh menggunakan sifat lastIndex.
Petua: Jika anda mula mendapatkan satu lagi rentetan baharu selepas berjaya memadankan rentetan tertentu, anda perlu menetapkan sifat ini kepada 0 secara manual.
Anda boleh lihat di sini, http://www.dewen.net.cn/q/468/
Oleh kerana tanda padanan global g digunakan dalam ungkapan biasa, ungkapan biasa akan merekodkan kedudukan padanan yang berjaya lastIndex, dan teruskan padanan dari Kedudukan ini perlawanan ke belakang.
Jadi bila matching untuk kali kedua, tak perlu tengok kucing sebelumnya, cabut g sahaja.