Saya menulis artikel tentang memulai dengan ekspresi reguler sebelumnya. Saya pikir saya relatif akrab dengan ekspresi reguler, tetapi hari ini saya menemukan jebakan lain. Mungkin itu karena saya tidak cukup hati -hati. Hari ini saya akan fokus untuk berbagi dengan Anda pengelompokan dalam ekspresi reguler JavaScript. Jika Anda tidak cukup memahami ekspresi reguler JS, Anda dapat mengklik di sini untuk mempelajari lebih lanjut.
Pengelompokan cukup banyak digunakan dalam aturan reguler. Pengelompokan yang saya pahami adalah sepasang tanda kurung (), dan setiap sepasang tanda kurung mewakili grup.
Pengelompokan dapat dibagi menjadi:
Pengambilan pengelompokan akan mendapatkan hasil pengelompokan yang sesuai dalam bentuk istilah kedua dan istilah ketiga dalam fungsi seperti EXEC Match. Mari kita lihat contoh terlebih dahulu
var reg =/test (/d+)/; var str = 'test001 test002' baru; console.log (str.match (reg)); // ["test001", "001", indeks: 4, input: "test001 test002 baru"]
Dalam kode (/d+) adalah grup (beberapa orang juga menyebutnya sub-pola), tetapi mereka semua mewakili makna yang sama. Dalam contoh di atas, test001 adalah hasil dari pertandingan yang tepat.
Namun, pencocokan grup adalah untuk menemukan karakter yang cocok dengan sub-pola/D+ dari seluruh hasil pertandingan yang tepat (yaitu, test001). Ini jelas 001.
Tapi inilah yang saya temui hari ini
var reg =/test (/d)+/; var str = 'test001 test002' baru; Console.log (str.match (Reg)); // ["test001", "1", indeks: 4, input: "test001 test002 baru"]
Perbedaannya adalah bahwa (/d+) diubah menjadi (/d)+, dan seluruh hasil pencocokan masih test001, tetapi hasil pencocokan grup pertama berbeda.
Mari kita lihat perbedaan mereka
(/d+) Ini adalah situasi pengelompokan, karena secara default pola pencocokan adalah pola serakah, yaitu, sebanyak mungkin cocok
Hasil dari semua /d+ kecocokan adalah 001. Kemudian sepasang tanda kurung ditambahkan di luar, yang berarti grup, jadi hasil pencocokan dalam grup pertama adalah 001.
Mari kita lihat (/d)+ dalam contoh kedua. Ini juga merupakan pola serakah. Pertama, pertama -tama akan mencocokkan 0 dan kemudian 0 dan juga akan cocok dengan akhir 1.
Tampaknya tidak ada perbedaan dari pertandingan dalam contoh pertama, tetapi pengelompokan (/d) di sini berarti mencocokkan satu nomor.
Menurut pemahaman saya sebelumnya, hasil bahwa pertandingan adalah 0 pada awalnya adalah 0, tetapi pemahaman ini salah. Karena seluruh pertandingan adalah pola serakah, cocok dengan sebanyak mungkin
(/d) dalam grup akan menangkap hasil yang cocok terakhir 1
Jika itu adalah pola non-greedy, itu akan cocok sesedikit mungkin
var reg =/test (/d)+?/; var str = 'test001 test002' baru; console.log (str.match (reg)); // ["test001", "0", index: 4, input: "test001 test002 baru"]
Dengan cara ini, hasil pencocokan (/d) adalah 0. Meskipun masih ada hasil yang dapat dicocokkan nanti, di sini harus mencocokkan sesedikit mungkin
Pengelompokan yang tidak menangkap
var reg =/test (?:/d)+/; var str = 'test001 test002' baru; console.log (str.match (reg)); // ["test001", indeks: 4, input: "test001 test002 baru"]
Pengelompokan yang tidak menangkap berarti bahwa sepasang tanda kurung diperlukan di beberapa tempat, tetapi mereka tidak ingin itu menjadi pengelompokan penangkapan, yang berarti mereka tidak ingin kelompok ini diperoleh dengan fungsi seperti Macth Exec.
Biasanya, menambahkan ?: (?: pola) di dalam braket menjadi kelompok non-kapur.
Dengan cara ini, tidak akan ada pencocokan konten dalam hasil pertandingan pertandingan, yang berarti bahwa item kedua hilang.
Artikel ini berfokus pada menjelaskan perbedaan antara (/d+) dan (/d)+, yang juga merupakan lubang yang saya ajukan hari ini. Jika ada kesalahan, jangan ragu untuk memperbaikinya.