Semua artikel

Ekspresi reguler: sintaks dasar dan pola umum

Regular expression (regex) adalah cara ringkas untuk mendeskripsikan pola teks — bukan string tertentu, melainkan aturan yang harus dipenuhi oleh sebuah string. Alih-alih memeriksa karakter satu per satu dalam loop, satu ekspresi saja bisa mencari atau memvalidasi struktur yang kompleks.

Blok bangunan dasar

  • Kelas karakter\d (digit), \w (huruf/angka/garis bawah), \s (spasi), atau kelas kustom seperti [a-zA-Z].
  • Kuantifier* (0 atau lebih), + (1 atau lebih), ? (0 atau 1), {2,5} (2 sampai 5 kali).
  • Grup tangkap (capture group) — tanda kurung (...) menandai bagian dari hasil yang cocok, yang bisa dipakai terpisah, misalnya saat mengganti teks.
  • Anchor^ dan $ mengikat pola ke awal atau akhir baris.

Kenapa \w bisa memecah kata berapostrof

Bahasa Indonesia ditulis dengan alfabet Latin polos, jadi kelas \w — yang di JavaScript berarti persis [A-Za-z0-9_] — biasanya cocok untuk sebagian besar kata. Tapi banyak kata Indonesia memakai apostrof untuk menandai glotal stop, misalnya "ma'af" atau "Al-Qur'an", dan apostrof bukan bagian dari \w. Pola /^\w+$/.test("ma'af") akan mengembalikan false karena regex berhenti di tanda kutip tunggal, bukan karena hurufnya asing. Kalau validasi input memakai \w+ secara mentah, kata-kata semacam ini akan tertolak padahal ejaannya benar — solusinya menambahkan apostrof ke kelas karakter secara eksplisit, misalnya [\w']+.

Pencocokan rakus vs malas

Secara default kuantifier bersifat "rakus" (greedy) — mencoba menangkap karakter sebanyak mungkin, dan baru mundur kalau itu menghalangi kecocokan. Misalnya <.+> pada <a>text</a> akan menangkap semua dari < pertama sampai > terakhir. Menambahkan ? setelah kuantifier (<.+?>) membuatnya "malas" (lazy) — menangkap sesedikit mungkin dan berhenti di kecocokan valid pertama.

Kegunaannya

  • Memvalidasi format data masukan (email, nomor telepon, kode pos).
  • Mencari dan mengganti teks secara massal berdasarkan pola, bukan kecocokan persis.
  • Mengekstrak data terstruktur dari log atau teks tak terstruktur.

Catastrophic backtracking

Kuantifier bersarang seperti (a+)+ bisa memaksa mesin regex mencoba kombinasi dalam jumlah eksponensial pada input tertentu sebelum menyimpulkan tidak ada kecocokan — halaman atau server jadi "macet" pada ekspresi yang terlihat sederhana. Ini kerentanan nyata (ReDoS), jadi kuantifier bersarang yang kompleks sebaiknya diuji dengan string panjang yang "hampir cocok", bukan hanya contoh yang diharapkan.

Coba alat