Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menangkap Berbilang Kumpulan dalam Ungkapan Biasa JavaScript?

Bagaimana untuk Menangkap Berbilang Kumpulan dalam Ungkapan Biasa JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-11-11 08:30:031060semak imbas

How to Capture Multiple Groups in JavaScript Regular Expressions?

Akses Semua Tangkapan dalam Ungkapan Biasa JavaScript

Masalah timbul apabila cuba menangkap berbilang kumpulan dalam ungkapan biasa JavaScript, di mana hanya yang terakhir tangkapan dikekalkan.

Pertimbangkan contoh berikut:

"foo bar baz".match(/^(\s*\w+)+$/)

Daripada mengembalikan semua perlawanan seperti ["foo", "bar", "baz"], ia hanya mengembalikan ["baz "]. Tingkah laku ini berlaku kerana kumpulan penangkapan berulang menimpa tangkapan sebelumnya.

Untuk menyelesaikan masalah ini, pertimbangkan pendekatan alternatif:

  • Pisah pada Pembatas: Jika boleh, belah rentetan pada pembatas yang diketahui dan bukannya menggunakan kumpulan penangkapan berulang.
  • Regex dengan g Bendera: Gunakan ungkapan biasa dengan bendera g untuk mengulangi semua padanan. Ambil perhatian bahawa ini mungkin bukan setara yang tepat dengan kumpulan menangkap berulang.
  • Padanan Berbilang Peringkat: Lakukan berbilang padanan regex untuk menangkap corak tertentu dan kemudian memisahkan atau memprosesnya lagi.

Sebagai contoh, untuk menangkap urutan perkataan yang disertakan dalam < > dan bahagikannya pada ;, pertimbangkan contoh berikut:

var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";

var r = /<(\w+(;\w+)*)>/g;

var match;
while ((match = r.exec(text)) != null) {
  print(match[1].split(";"));
}

Reex ini membahagikan urutan yang ditangkap kepada perkataan individu.

Rujukan:

  • [Maklumat Ungkapan Biasa: Mengulang lwn Menangkap Kumpulan](https://www.regular-expressions.info/repeating-a-capturing-group-vs-capturing-a-repeating-group)

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Berbilang Kumpulan dalam Ungkapan Biasa JavaScript?. 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