Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa JavaScript Regex Gagal Mengekstrak Teks Berbilang Baris dengan Bendera 'm'?

Mengapa JavaScript Regex Gagal Mengekstrak Teks Berbilang Baris dengan Bendera 'm'?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 01:36:02965semak imbas

Why Does JavaScript Regex Fail to Extract Multiline Text with the 'm' Flag?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn