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

Bagaimanakah Saya Boleh Cari Padanan Bertindih dalam Rentetan Menggunakan Ungkapan Biasa?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 08:21:11295semak imbas

How Can I Find Overlapping Matches in a String Using Regular Expressions?

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!

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