Jawaban:
g
adalah untuk pencarian global. Artinya itu akan cocok dengan semua kejadian. Anda biasanya juga akan melihat i
yang artinya mengabaikan kasus.
Referensi: global - JavaScript | MDN
Bendera "g" menunjukkan bahwa ekspresi reguler harus diuji terhadap semua kemungkinan kecocokan dalam sebuah string.
Tanpa g
bendera, itu hanya akan menguji yang pertama.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
adalah bendera pencarian global.
Bendera pencarian global membuat RegExp mencari pola di seluruh string, membuat larik dari semua kejadian yang dapat ditemukan cocok dengan pola yang diberikan.
Jadi perbedaan antara /.+/g
dan /.+/
adalah bahwa g
versi tersebut akan menemukan setiap kemunculan, bukan hanya yang pertama.
Seperti yang ditunjukkan oleh @matiska, g
flag tersebut juga menyetel lastIndex
properti.
Efek samping yang sangat penting dari hal ini adalah jika Anda menggunakan kembali instance regex yang sama terhadap string yang cocok, pada akhirnya akan gagal karena hanya mulai mencari di lastIndex
.
// regular regex
const regex = /foo/;
// same regex with global flag
const regexG = /foo/g;
const str = " foo foo foo ";
const test = (r) => console.log(
r,
r.lastIndex,
r.test(str),
r.lastIndex
);
// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);
// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);
Selain arti g
bendera yang telah disebutkan , itu juga mempengaruhi regexp.lastIndex
properti:
LastIndex adalah properti bilangan bulat baca / tulis dari instance ekspresi reguler yang menentukan indeks untuk memulai pertandingan berikutnya. (...) Properti ini disetel hanya jika ekspresi reguler menggunakan tanda "g" untuk menunjukkan pencarian global.
Referensi: Jaringan Pengembang Mozilla
G dalam ekspresi reguler adalah definisi pencarian global, artinya akan mencari semua contoh di semua baris.
g
->
mengembalikan semua pertandinganwithout g
->
mengembalikan pertandingan pertamacontoh:
'1 2 1 5 6 7'.match(/\d+/)
kembali ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Seperti yang Anda lihat, kami hanya bisa mengambil pertandingan pertama "1"
.'1 2 1 5 6 7'.match(/\d+/g)
mengembalikan larik semua kecocokan ["1", "2", "1", "5", "6", "7"]
.