Dilema Regex: Pengekstrakan Teks Berbilang Baris
Dalam percubaan untuk mengekstrak teks daripada HTML menggunakan regex JavaScript, pembangun menghadapi halangan yang tidak dijangka: bendera berbilang baris (m) kelihatan tidak berkesan dalam menangkap teks berbilang baris.
Corak regex yang disediakan bertujuan untuk mengekstrak teks yang disertakan dalam teg h1:
var pattern = /<div>
Walau bagaimanapun, apabila rentetan HTML mengandungi baris baharu (n), hasilnya secara konsisten muncul kosong. Mengalih keluar baris baharu menyelesaikan isu, tidak kira sama ada bendera m hadir.
Penyelesaian: Pengubahsuai Dotall
Penyebabnya terletak pada kekurangan pengubah suai dotall dalam JavaScript. Secara lalai, titik (.) sepadan dengan mana-mana aksara kecuali baris baharu. Untuk mengatasi pengehadan ini, penyelesaian yang melibatkan kelas aksara dan penafian mereka boleh digunakan:
[\s\S]
Kelas aksara ini sepadan dengan mana-mana watak, termasuk baris baharu dan ruang kosong lain. Digabungkan ke dalam regex, ia menghasilkan:
/<div>
Penyelesaian Moden dengan Bendera DotAll
Sehingga ES2018, JavaScript menyokong bendera s (dotAll). Bendera ini secara eksplisit mengarahkan enjin regex untuk membenarkan titik sepadan dengan baris baharu, menghapuskan keperluan untuk penyelesaian:
/<div>
Atas ialah kandungan terperinci Mengapa JavaScript Regex Gagal Mengekstrak Teks Berbilang Baris dengan Bendera 'm'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!