Mengakses subkumpulan yang ditangkap oleh ungkapan biasa dalam JavaScript boleh dicapai menggunakan kaedah exec(). Kaedah ini mengembalikan objek seperti Tatasusunan yang mengandungi padanan yang dibuat oleh ungkapan.
Untuk menggambarkan, pertimbangkan contoh berikut:
var myString = "something format_abc"; // Obtain "abc" const arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString); console.log(arr); // Outputs: [" format_abc", "abc"] console.log(arr[1]); // Outputs: undefined (the issue) console.log(arr[0]); // Outputs: format_undefined (another issue)
Output yang dijangkakan adalah untuk mendapatkan subkumpulan "abc" sebagai elemen kedua tatasusunan arr. Walau bagaimanapun, mengakses arr[1] dan arr[0] masing-masing membawa kepada nilai yang tidak ditentukan dan tidak betul.
Menyelesaikan Output Tidak Ditakrifkan:
Ketiadaan nilai dalam arr[1] disebabkan oleh .*? pengkuantiti tidak tamak yang digunakan dalam ungkapan biasa. Pengkuantiti ini menangkap bilangan minimum aksara yang mungkin, menghasilkan rentetan "format_abc" tanpa pembatas.
Untuk membetulkannya, gunakan pengkuantiti tamak .* sebaliknya:
/(?:^|\s)format_(.*)(?:\s|$)/
Membetulkan Output Rentetan Yang Salah:
Isu arr[0] timbul daripada penggunaan pemformatan seperti printf konsol. Aksara khas % dalam format_%A cuba menggantikan nilai parameter seterusnya, yang tiada.
Untuk membetulkannya, lepaskan % dalam ungkapan biasa:
/(?:^|\s)format_(.*?)(?:\s|$)/
Dengan pengubahsuaian ini, output yang betul dicapai:
[" format_abc", "abc"] console.log(arr[1]); // Outputs: "abc" console.log(arr[0]); // Outputs: " format_abc"
Mengakses Kumpulan Dipadankan melalui matchAll() (ECMAScript 2020 dan Kemudian):
Kaedah String.prototype.matchAll() menyediakan pendekatan moden dan lebih intuitif untuk mengulang berbilang padanan dalam rentetan. Ia mengembalikan iterator yang boleh digunakan seperti berikut:
const string = "something format_abc"; const regexp = /(?:^|\s)format_(.*?)(?:\s|$)/g; const matches = string.matchAll(regexp); for (const match of matches) { console.log(match); console.log(match.index); }
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Kumpulan Dipadankan dengan Betul dalam Ungkapan Biasa JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!