Apa itu Regular Expression?
Regular Expression (disingkat regex atau regexp) adalah pola teks yang digunakan untuk mencocokkan, mencari, dan memanipulasi string. Bayangkan regex sebagai "bahasa pencarian super" — jauh lebih powerful dari Ctrl+F biasa.
Mengapa Belajar Regex?
Regex dipakai di hampir semua bahasa pemrograman dan tool developer:
- Validasi input — cek apakah email, nomor telepon, atau URL valid
- Pencarian teks — temukan pola tertentu dalam ribuan baris kode
- Find & Replace — ganti format tanggal, ubah naming convention, dll
- Parsing data — ekstrak informasi dari log file, CSV, HTML
- Editor kode — VS Code, Sublime Text, semua mendukung regex search
Regex Pertamamu
Regex paling sederhana adalah teks biasa. Pattern kucing akan cocok dengan kata "kucing" di dalam string:
const teks = "Saya punya kucing dan anjing";
const hasil = teks.match(/kucing/);
console.log(hasil[0]); // "kucing"
Perhatikan bahwa regex di JavaScript ditulis di antara dua garis miring /pattern/. Ini disebut regex literal.
Cara Kerja Regex
Regex engine membaca pattern dari kiri ke kanan dan mencocokkan karakter per karakter:
Teks: S a y a p u n y a k u c i n g
Pattern: k u c i n g ✓ cocok!
Engine akan "menggeser" pattern ke setiap posisi dalam teks sampai menemukan kecocokan (atau sampai akhir teks jika tidak ada).
Flag / Modifier
Setelah regex literal, kamu bisa menambahkan flag untuk mengubah perilaku pencarian:
const teks = "Kucing besar dan kucing kecil";
// Tanpa flag — hanya menemukan "kucing" pertama (huruf kecil)
teks.match(/kucing/); // ["kucing"]
// Flag g (global) — temukan SEMUA kecocokan
teks.match(/kucing/g); // ["kucing"]
// Flag i (case-insensitive) — abaikan besar/kecil huruf
teks.match(/kucing/gi); // ["Kucing", "kucing"]
Flag yang paling sering dipakai:
g— global, temukan semua kecocokan (bukan hanya pertama)i— case-insensitive, abaikan besar/kecil hurufm— multiline,^dan$cocok di setiap baris
Contoh Praktis
// Cek apakah string mengandung angka
const punyaAngka = /[0-9]/.test("harga100");
console.log(punyaAngka); // true
// Temukan semua kata yang diawali huruf besar
const teks = "Budi pergi ke Jakarta bersama Siti";
const nama = teks.match(/[A-Z][a-z]+/g);
console.log(nama); // ["Budi", "Jakarta", "Siti"]
Di pelajaran berikutnya, kita akan mempelajari berbagai karakter spesial yang membuat regex begitu powerful.
🎭 Analogi sehari-hari: Regex = mesin pencari pola di mesin tik tua. Bukan cari "Budi" persis (Ctrl+F), tapi "siapa pun yang namanya 4 huruf, dimulai huruf B, akhir huruf vokal" — cari pola, bukan exact text. Polisi punya sketsa wajah (pattern), cari orang yang fit sketsa di kerumunan. Lebih powerful tapi sketsa harus dirancang teliti.
💡 Mengapa regex sering ditakuti pemula? Sintaks padat = "noise to signal" tinggi. ^[a-zA-Z][\w.-]*@\w+\.\w{2,}$ = email validator dasar. Tiap karakter punya makna khusus. Triknya: pelajari komponen kecil dulu, baru gabungin. Jangan langsung baca regex panjang.
⚠️ Jebakan klasik:
- Pakai regex untuk parse HTML/XML/JSON — gak akan handle nested struct dengan benar. Pakai parser proper
- Greedy default =
.*ambil sebanyak mungkin = unexpected match - Lupa escape karakter spesial —
.cocok semua karakter, harus\.untuk titik literal - Forget flags —
/foo/cuma match pertama, butuh/foo/guntuk semua - Catastrophic backtracking = regex hang server (ReDoS attack vector)
🎯 Kapan pakai regex:
- Validasi format simpel — email, phone, postal code
- Find & replace dengan pola — uppercase first letter, format tanggal
- Parse log line dengan format konsisten
- Search code editor — find function dengan pattern tertentu
❌ Kapan JANGAN regex:
- Parse HTML/XML/JSON → pakai parser
- Validasi email production-grade → pakai library (regex email yang "benar" 6000+ char)
- Logic kompleks dengan banyak branch → pakai parser tools (PEG, ANTLR)
TL;DR: Regex = pattern matching language untuk text. Powerful + ubiquitous (tiap bahasa support). Belajar komponen dulu, gabung kemudian. Jangan parse structured data (HTML/JSON) dengan regex. Awas ReDoS untuk pattern user-input.