Rumah > Artikel > hujung hadapan web > Bagaimanakah anda boleh menangkap berbilang kumpulan dalam ekspres semula JavaScript apabila pengulangan hanya mengekalkan perlawanan terakhir?
Menangkap Berbilang Kumpulan dalam JavaScript Regexp
Apabila bekerja dengan ungkapan biasa dalam JavaScript, adalah mungkin untuk menangkap berbilang kumpulan padanan dalam rentetan . Walau bagaimanapun, terdapat had kepada bilangan kumpulan yang boleh ditangkap dan diambil semula.
Pertimbangkan regexp JavaScript berikut:
"foo bar baz".match(/^(\s*\w+)+$/)
Orang mungkin menjangkakan regexp ini mengembalikan tatasusunan yang mengandungi keseluruhan rentetan "foo bar baz" serta setiap perkataan individu:
["foo bar baz", "foo", " bar", " baz"]
Walau bagaimanapun, regexp sebenarnya hanya mengembalikan yang terakhir padanan ditangkap:
["foo bar baz", " baz"]
Tingkah laku ini berlaku kerana, dalam kebanyakan perisa regexp, hanya tangkapan terakhir untuk kumpulan tangkapan berulang dikekalkan. Dalam JavaScript, mengulangi kumpulan penangkapan hanya membenarkan penangkapan bilangan rentetan yang ditetapkan setiap perlawanan.
Untuk mengatasi had ini, terdapat beberapa pilihan:
Contoh:
Untuk memadankan rentetan
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(";")); }
Pendekatan ini menggunakan dua peringkat padanan untuk mengekstrak perkataan individu daripada rentetan.
Atas ialah kandungan terperinci Bagaimanakah anda boleh menangkap berbilang kumpulan dalam ekspres semula JavaScript apabila pengulangan hanya mengekalkan perlawanan terakhir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!