Regular expression (disingkat regex) adalah pola buat mencari teks. Bukan cuma kata yang persis, tapi juga "angka berapa pun" atau "sesuatu, lalu @, lalu sesuatu". Regex dipakai buat mengecek format (misalnya email), mengambil bagian teks, dan mengganti teks.
🧪 Tebakan cepat:
'a-a-a'.replace(/a/, 'X')hasilnyaX-X-XatauX-a-a? Tebak dulu, jawabannya ada di bagian "Flaggdani".
Pola pertama: ambil semua angka
const teks = 'Budi bayar 50 ribu, Siti bayar 75 ribu'
const angka = teks.match(/\d+/g)
console.log(angka) // ['50', '75']
/\d+/gadalah regex. Garis miring/di depan dan belakang membungkus polanya, tanpa tanda kutip. Bentuk ini disebut regex literal.\dartinya satu digit, dari 0 sampai 9.+artinya "satu atau lebih" dari yang ada di depannya. Jadi\d+menangkap50utuh, bukan5dan0terpisah.gsesudah garis miring penutup adalah flag (pengaturan tambahan).gartinya global: cari semua yang cocok, bukan cuma yang pertama.teks.match(pola)mengembalikan array berisi semua yang cocok, sebagai string.
Kalau gak ada yang cocok sama sekali, match mengembalikan null, bukan array kosong. Biar hasilnya selalu array, tulis teks.match(/\d+/g) || []. Tanda || memakai [] kalau sisi kirinya null.
Potongan pola yang sering dipakai
\dsatu digit.[0-9]artinya sama: satu karakter dari daftar di dalam kurung siku.\wsatu huruf, angka, atau garis bawah.\ssatu spasi (termasuk tab dan baris baru).\S, dengan S besar, kebalikannya: satu karakter apa saja yang bukan spasi..satu karakter apa saja. Butuh titik beneran? Tulis\.dengan backslash.+satu atau lebih,*nol atau lebih,?boleh ada boleh gak.
Karakter lain, kayak @ atau huruf-huruf budi, cocok dengan dirinya sendiri.
Cek cocok atau gak dengan test()
console.log(/\d/.test('abc123')) // true
const polaEmail = /\S+@\S+\.\S+/
console.log(polaEmail.test('[email protected]')) // true
console.log(polaEmail.test('budi')) // false
pola.test(teks) cuma menjawab ada yang cocok atau gak: true atau false. Baris pertama true karena abc123 punya digit. Pola email dibaca dari kiri:
\S+beberapa karakter yang bukan spasi (namanya),@huruf @ itu sendiri,\S+lagi (nama domainnya),\.sebuah titik beneran,\S+(misalnyacom).
Perhatikan siapa memanggil siapa: test dipanggil dari pola (pola.test(teks)), sedangkan match dan replace dipanggil dari teks (teks.match(pola)).
Flag g dan i
teks.replace(pola, pengganti) mengembalikan teks baru, dengan bagian yang cocok diganti. Tanpa g, cuma yang pertama yang diganti:
console.log('a-a-a'.replace(/a/, 'X')) // X-a-a
console.log('a-a-a'.replace(/a/g, 'X')) // X-X-X
console.log(/budi/i.test('BUDI')) // true
Flag i bikin huruf besar dan kecil dianggap sama, jadi /a/i cocok dengan a maupun A. Flag ditulis sesudah garis miring penutup, dan boleh digabung: /a/gi.
⚠️ Jebakan yang sering ketemu
- Lupa
+.'ada 12 apel'.match(/\d/g)memecah 12 jadi'1'dan'2'. - Titik tanpa backslash.
/3.14/juga cocok dengan3x14, karena.artinya karakter apa saja. Tulis/3\.14/. - Langsung pakai hasil
match. Kalau gak ada yang cocok, hasilnyanull, dannull.lengthbikin error. Tambah|| []. - Regex buat hal yang sederhana. Cuma mau tahu teks mengandung
@?teks.includes('@')lebih gampang dibaca.
TL;DR: Regex ditulis di antara garis miring, /pola/flag. \d digit, \S bukan spasi, \. titik beneran, + satu atau lebih. pola.test(teks) menjawab true atau false, teks.match(/pola/g) mengambil semua yang cocok (atau null, jadi tambah || []), dan teks.replace(pola, baru) mengganti. Flag g artinya semua, i artinya huruf besar dan kecil dianggap sama.