Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Memadankan Rentetan Bertindih Menggunakan Ungkapan Biasa?

Bagaimanakah Saya Boleh Memadankan Rentetan Bertindih Menggunakan Ungkapan Biasa?

Mary-Kate Olsen
Lepaskan: 2024-12-07 15:43:16
asal
386 orang telah melayarinya

How Can I Match Overlapping Strings Using Regular Expressions?

Memadankan Rentetan Bertindih dengan Ungkapan Biasa

Apabila memadankan rentetan bertindih dengan regex, adalah penting untuk memahami cara kaedah padanan dan penimbalan ungkapan biasa berfungsi.

Isunya: Memakan Watak Sepadan

Secara lalai, kaedah padanan dengan bendera global (g) dalam ungkapan biasa menggunakan aksara yang dipadankan dan memajukan indeks ke kedudukan sejurus selepas subrentetan yang dipadankan. Contohnya, regex /d{3}/g akan memadankan jujukan tiga digit, tetapi ia hanya akan mengembalikan satu padanan kerana ia menggunakan aksara yang dipadankan.

Penyelesaian: Penegasan Lebar Sifar

Untuk memadankan rentetan bertindih, anda boleh menggunakan penegasan lebar sifar, yang merupakan pandangan positif dengan kumpulan penangkap. Penegasan ini menguji semua kedudukan dalam rentetan input, dan jika padanan ditemui, kumpulan penangkap menangkap subrentetan yang sepadan. Sifat RegExp.lastIndex kemudiannya dimajukan secara manual untuk mengelakkan gelung tak terhingga.

Menggunakan 'matchAll'

Jika bahasa pengaturcaraan anda menyokong kaedah matchAll, anda boleh menggunakannya untuk melaksanakan penegasan lebar sifar dan cari semua padanan bertindih. Sebagai contoh, dalam JavaScript, kod berikut menggunakan matchAll untuk mencari semua subrentetan tiga digit yang bertindih dalam rentetan "12345":

var re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]));
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memadankan Rentetan Bertindih Menggunakan Ungkapan Biasa?. 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