Pahami Perbedaan “g” dalam Regular Expression

Pahami Perbedaan “g” dalam Regular Expression
Photo by Tudor Baciu / Unsplash

Kalau kamu sering menggunakan Regular Expression (RegExp) di JavaScript, pasti pernah lihat flag g. Flag ini mungkin kelihatan sederhana, tapi sebenarnya punya pengaruh besar terhadap cara pencarian teks dilakukan.

Tanpa g, pencarian hanya menemukan hasil pertama, sementara dengan g, kita bisa mendapatkan semua kecocokan dalam teks. Tapi, ternyata efek g bisa lebih luas dari sekadar itu. Yuk, kita bahas lebih dalam!

Apa Itu Flag “g” dalam RegExp?

Dalam Regular Expression, g adalah flag global, yang artinya mencari semua kecocokan dalam string, bukan hanya yang pertama.

Misalnya, tanpa g, pencarian hanya akan berhenti di hasil pertama:

let teks = "JavaScript adalah bahasa JavaScript";
let regex = /JavaScript/;

console.log(teks.match(regex));
// Output: ["JavaScript"]

Cuma satu "JavaScript" yang ditemukan, meskipun ada dua dalam teks.

Tapi kalau pakai g:

let regex = /JavaScript/g;

console.log(teks.match(regex));
// Output: ["JavaScript", "JavaScript"]

Sekarang, semua kemunculan "JavaScript" ditemukan.

Jadi, kalau kamu butuh mencari semua kecocokan dalam string, selalu gunakan flag g.

Apa yang Terjadi Tanpa “g” dalam RegExp?

Kalau kita nggak pakai g, metode seperti match() hanya mengembalikan satu hasil pertama yang ditemukan.

1. Tanpa g, match() hanya mengembalikan satu hasil

let teks = "Halo dunia, dunia itu luas!";
let regex = /dunia/;

console.log(teks.match(regex));
// Output: ["dunia"]

Walaupun ada dua kata "dunia", hanya satu yang ditemukan.

2. Tanpa g, test() tetap berfungsi seperti biasa

Metode test() tetap bekerja dengan benar tanpa g:

let regex = /dunia/;
console.log(regex.test(teks));
// Output: true

Tapi kalau mau mengecek berapa kali pola muncul dalam teks, g sangat penting.

Apa yang Terjadi dengan “g” dalam RegExp?

Saat kita pakai flag g, hasil pencarian berubah jadi lebih fleksibel.

1. Dengan g, match() Mengembalikan Semua Kecocokan

let regex = /dunia/g;
console.log(teks.match(regex));
// Output: ["dunia", "dunia"]

Karena ada dua kata "dunia", match() akan mengembalikan semua kemunculan dalam bentuk array.

2. Dengan g, exec() Bisa Digunakan dalam Loop

Metode exec() bisa digunakan berulang-ulang buat mencari semua kemunculan pola dalam teks.

Tanpa g, exec() hanya menemukan hasil pertama:

let regex = /dunia/;
let hasil = regex.exec(teks);

console.log(hasil);
// Output: ["dunia", index: 5, input: "Halo dunia, dunia itu luas!", groups: undefined]

Tapi kalau pakai g, exec() bisa digunakan dalam loop buat mendapatkan semua hasil:

let regex = /dunia/g;
let hasil;

while ((hasil = regex.exec(teks)) !== null) {
  console.log(`Ditemukan '${hasil[0]}' di index ${hasil.index}`);
}

Output:

Ditemukan 'dunia' di index 5
Ditemukan 'dunia' di index 13

Flag g membuat exec() bisa terus berjalan sampai semua kemunculan ditemukan.

3. Dengan g, replace() Bisa Mengganti Semua Kecocokan Sekaligus

Kalau kita mau mengganti teks dalam string, flag g sangat penting.

Tanpa g, replace() hanya mengganti kemunculan pertama:

let teks = "Saya suka coding. Coding itu menyenangkan!";
let hasil = teks.replace(/coding/, "ngoding");

console.log(hasil);
// Output: "Saya suka ngoding. Coding itu menyenangkan!"

Tapi kalau pakai g, semua kecocokan akan diganti:

let hasil = teks.replace(/coding/g, "ngoding");

console.log(hasil);
// Output: "Saya suka ngoding. Ngoding itu menyenangkan!"

Jadi kalau mau mengganti semua kata dalam teks, jangan lupa pakai g.

Kapan Sebaiknya Menggunakan “g” dalam RegExp?

Saat ingin mencari semua kecocokan dalam string
Contohnya, kalau kita ingin mendapatkan semua kata tertentu dalam teks:

let teks = "JavaScript adalah JavaScript!";
console.log(teks.match(/JavaScript/g));
// Output: ["JavaScript", "JavaScript"]

Saat ingin mengganti semua kecocokan dengan replace()
Kalau cuma mau mengganti satu, cukup pakai string biasa. Tapi kalau mau mengganti semuanya, gunakan g:

let teks = "Belajar JavaScript itu seru!";
console.log(teks.replace(/JavaScript/g, "JS"));
// Output: "Belajar JS itu seru!"

Saat menggunakan exec() dalam loop
Jika ingin mendapatkan semua posisi di mana suatu kata muncul dalam teks, gunakan loop dengan exec().

Kapan Sebaiknya Tidak Menggunakan “g”?

🚫 Saat hanya butuh satu hasil pertama
Kalau kamu hanya ingin mengecek apakah pola ada dalam teks dan nggak butuh lebih dari satu hasil, tidak perlu g:

let regex = /JavaScript/;
console.log(regex.test("Saya suka JavaScript"));
// Output: true

🚫 Saat menggunakan match() tanpa ingin array
Jika kita hanya butuh satu kecocokan pertama, tanpa g akan lebih praktis karena match() mengembalikan satu array lengkap.

let regex = /JavaScript/;
console.log("Belajar JavaScript".match(regex));
// Output: ["JavaScript", index: 8, input: "Belajar JavaScript", groups: undefined]

Kalau pakai g, hasilnya bisa berbeda karena akan dikembalikan sebagai array daftar kecocokan:

let regex = /JavaScript/g;
console.log("Belajar JavaScript JavaScript".match(regex));
// Output: ["JavaScript", "JavaScript"]

Kesimpulan

  • Tanpa g, RegExp hanya menemukan hasil pertama.
  • Dengan g, kita bisa mendapatkan semua kecocokan dalam string.
  • match() dengan g mengembalikan array berisi semua kecocokan.
  • replace() dengan g mengganti semua kecocokan dalam teks.
  • exec() dengan g bisa digunakan dalam loop untuk menemukan semua kecocokan.

Kalau kamu butuh mencari semua pola dalam string, pastikan selalu tambahkan g. Namun, kalau hanya butuh satu hasil pertama, cukup gunakan RegExp tanpa g.

Sekarang, coba sendiri di kode kamu dan lihat bagaimana efek g dalam Regular Expression!