Regular Expressions — JavaScript

Bayangin kamu jadi tukang pos yang harus filter ribuan amplop: "ambil yang alamatnya Jakarta, yang ada kode pos 5 angka, yang nama penerima diawali huruf B."…

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') hasilnya X-X-X atau X-a-a? Tebak dulu, jawabannya ada di bagian "Flag g dan i".

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']

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

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:

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

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.

Yang akan kamu pelajari