Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Cari Padanan Bertindih dalam Rentetan Menggunakan Ungkapan Biasa?
Memahami Padanan Rentetan Bertindih dengan Regex
Dalam senario tertentu, kaedah rentetan#padanan dengan bendera global mungkin tidak sepadan dengan jujukan bertindih dalam rentetan input. Sebagai contoh, pertimbangkan rentetan "12345". Menggunakan ungkapan biasa /d{3}/g, kami menjangkakan memperoleh tiga padanan: ["123", "234", "345"]. Walau bagaimanapun, kami hanya mendapat satu padanan, "123".
Ini kerana kaedah rentetan#padanan menggunakan (iaitu, membaca dan memajukan indeksnya melepasi) aksara yang dipadankan. Oleh itu, selepas memadankan "123", indeks semasa menghala ke '4' dan enjin regex berhenti, meninggalkan tiada lagi padanan ditemui.
Menyelesaikan Padanan Bertindih dengan Penegasan Lebar Sifar
Untuk menangani had ini, teknik yang popular melibatkan penggunaan penegasan pandang ke hadapan yang positif dengan kumpulan penangkap. Pendekatan ini menegaskan kehadiran subrentetan tanpa benar-benar memakannya. Dengan berulang kali menguji semua kedudukan dalam rentetan input, kami boleh menangkap padanan bertindih yang diingini.
var re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]);
Dalam contoh ini, kami mencipta ungkapan biasa dengan penegasan pandang ke hadapan yang positif yang menangkap tiga digit berturut-turut tanpa memakannya. Dengan mengulangi rentetan input menggunakan matchAll, kami memperoleh senarai padanan yang dikehendaki: ["123", "234", "345"].
Teknik ini disokong dalam pelbagai bahasa pengaturcaraan, memperkasakan pembangun untuk mengendalikan senario padanan rentetan bertindih dengan mudah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Padanan Bertindih dalam Rentetan Menggunakan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!