Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mendapat Padanan Bertindih dengan Ungkapan Biasa dan Bendera Global?

Bagaimanakah Saya Boleh Mendapat Padanan Bertindih dengan Ungkapan Biasa dan Bendera Global?

Linda Hamilton
Lepaskan: 2024-12-13 02:24:16
asal
546 orang telah melayarinya

How Can I Get Overlapping Matches with Regular Expressions and the Global Flag?

Padanan Rentetan Bertindih dengan Ungkapan Biasa

Apabila menggunakan ungkapan biasa dengan bendera global (/g) untuk memadankan rentetan, anda boleh menghadapi kes di mana perlawanan bertindih tidak dikembalikan seperti yang diharapkan. Contohnya, dalam rentetan "12345," padanan menggunakan /d{3}/g hanya menghasilkan padanan "123" dan bukannya ["123", "234", "345"].

Sebabnya kerana tingkah laku ini terletak pada sifat pemadanan regex dengan bendera global. Enjin regex membaca dan menggunakan subrentetan yang dipadankan, memajukan indeksnya ke kedudukan serta-merta selepas perlawanan. Dalam kes ini, selepas memadankan "123," indeks bergerak ke kedudukan 4, meninggalkan hanya "45" untuk pemadanan berikutnya.

Teknik untuk Pemadanan Bertindih

Untuk mencapai perlawanan bertindih, beberapa pendekatan boleh bekerja:

  • Ketegasan Sifar Lebar:

    • Gunakan pandangan ke hadapan yang positif dengan kumpulan penangkap untuk menguji semua kedudukan dalam rentetan input .
    • Majukan RegExp.lastIndex secara manual untuk mengelakkan infiniti gelung.
    • Disokong oleh .NET, Python, PHP, Ruby dan Java (menggunakan matchAll).

Contoh (JavaScript menggunakan matchAll) :

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

Kod ini menggunakan pandangan ke hadapan yang positif untuk menguji semua jawatan dalam rentetan yang sepadan dengan tiga digit berturut-turut. Hasilnya ialah tatasusunan subrentetan yang dipadankan, termasuk ["123", "234", "345"].

Pertimbangan Tambahan:

  • Sifar -penegasan lebar hanya terpakai apabila anda perlu memadankan subrentetan bertindih.
  • Sesetengah regex enjin mempunyai sokongan terbina dalam untuk padanan bertindih (cth., PCRE dalam PHP dan Ruby).
  • Pendekatan alternatif mungkin termasuk menggunakan gelung dengan subrentetan atau fungsi belah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapat Padanan Bertindih dengan Ungkapan Biasa dan Bendera Global?. 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