Rumah > hujung hadapan web > tutorial js > Mengapakah Kaedah `match()` JavaScript Hanya Mencari Padanan Ungkapan Biasa Tidak Bertindih?

Mengapakah Kaedah `match()` JavaScript Hanya Mencari Padanan Ungkapan Biasa Tidak Bertindih?

Mary-Kate Olsen
Lepaskan: 2024-12-19 17:50:13
asal
976 orang telah melayarinya

Why Does JavaScript's `match()` Method Only Find Non-Overlapping Regular Expression Matches?

Padanan Bertindih dalam Ungkapan Biasa

Dalam ungkapan biasa, kaedah padanan dengan bendera g (global) biasanya sepadan dan menangkap hanya subrentetan tidak bertindih. Pertimbangkan contoh berikut:

const text = "12345";
const regex = /\d{3}/g;
const matches = text.match(regex);
Salin selepas log masuk

Dalam kes ini, kami menjangkakan mendapat tiga padanan: "123", "234", dan "345". Walau bagaimanapun, menggunakan kaedah padanan, kami hanya memperoleh "123".

Mengapa Hanya Satu Padanan?

Kaedah padanan menggunakan subrentetan yang dipadankan dan memajukan indeksnya. Selepas menangkap "123", indeks kini melepasi aksara ketiga, meninggalkan hanya "45" untuk potensi padanan. Memandangkan bahagian yang tinggal ini tidak memenuhi pola d{3}, tiada padanan lanjut ditemui.

Mengatasi Padanan Bertindih

Untuk menangkap padanan bertindih, kita perlu menggunakan teknik berbeza yang digunakan dalam sesetengah perisa regex seperti .Net, Python, PHP dan Ruby. Teknik ini melibatkan penggunaan penegasan lebar sifar (pandangan positif dengan kumpulan penangkap) untuk menguji semua kedudukan dalam rentetan input. Sifat RegExp.lastIndex ditambah secara manual untuk memajukan melalui rentetan tanpa gelung tak terhingga.

Sebagai contoh, menggunakan kaedah matchAll:

const re = /(?=(\d{3}))/g;
const matches = Array.from('12345'.matchAll(re));
console.log(matches.map(match => match[1])); // ["123", "234", "345"]
Salin selepas log masuk

Pendekatan ini menangkap ketiga-tiga padanan bertindih seperti yang dikehendaki. Ingat, teknik ini hanya disokong dalam perisa regex tertentu.

Atas ialah kandungan terperinci Mengapakah Kaedah `match()` JavaScript Hanya Mencari Padanan Ungkapan Biasa Tidak Bertindih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan