Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengakses Kumpulan Dipadankan dengan Betul dalam Ungkapan Biasa JavaScript?

Bagaimana untuk Mengakses Kumpulan Dipadankan dengan Betul dalam Ungkapan Biasa JavaScript?

Barbara Streisand
Lepaskan: 2024-12-26 13:08:14
asal
124 orang telah melayarinya

How to Correctly Access Matched Groups in JavaScript Regular Expressions?

Cara Mengakses Kumpulan Dipadankan dalam Ungkapan Biasa JavaScript

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)
Salin selepas log masuk

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|$)/
Salin selepas log masuk

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|$)/
Salin selepas log masuk

Dengan pengubahsuaian ini, output yang betul dicapai:

[" format_abc", "abc"]
console.log(arr[1]); // Outputs: "abc"
console.log(arr[0]); // Outputs: " format_abc"
Salin selepas log masuk

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);
}
Salin selepas log masuk

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!

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