Regular expression terkenal terlihat seperti derau acak. Pola seperti ^[\w.-]+@[\w-]+\.\w{2,}$ bisa terasa seperti kucing berjalan di atas keyboard. Tapi di balik sintaks yang kriptis tersimpan ide yang sangat elegan: bahasa ringkas untuk mendeskripsikan pola dalam teks.
Baik Anda memvalidasi input formulir, mencari file log, membersihkan data, atau melakukan find-and-replace di seluruh codebase, regex adalah salah satu alat paling serbaguna dalam perangkat developer. Dan Anda tidak perlu menghafal setiap fitur yang jarang digunakan untuk mendapatkan nilai nyata. Beberapa blok bangunan dasar sudah mencakup sebagian besar kasus penggunaan praktis.
Apa yang sebenarnya dilakukan regex
Regular expression (regex atau regexp) adalah pola yang mendeskripsikan sekumpulan string. Anda memberikannya ke mesin pencari — dalam bahasa pemrograman, editor teks, atau alat command-line — dan ia menemukan setiap string yang cocok.
Anggap saja seperti query pencarian yang di-upgrade:
- Pencarian normal: temukan kata persis "error"
- Pencarian regex: temukan apa pun yang terlihat seperti alamat IP, tanggal, alamat email, atau struktur apa pun yang bisa Anda deskripsikan
Regex diciptakan oleh matematikawan Stephen Kleene pada tahun 1956 dan masuk ke komputasi melalui editor teks Unix pada tahun 1960-an. Hari ini ia didukung di hampir setiap bahasa pemrograman dan editor teks.
Blok bangunan
Karakter literal
Regex paling sederhana adalah teks biasa. Pola hello cocok dengan string "hello" di mana pun ia muncul. Tidak ada yang istimewa.
Titik (.) — karakter apa pun
Titik cocok dengan karakter tunggal apa pun kecuali newline.
h.tcocok dengan "hat", "hit", "hot", "h3t", dan bahkan "h t"
Kelas karakter ([])
Kurung siku mendefinisikan sekumpulan karakter yang diizinkan di satu posisi.
[aeiou]— vokal apa pun[0-9]— digit apa pun[A-Za-z]— huruf apa pun[^0-9]— karakter apa pun yang BUKAN digit (tanda^di dalam kurung berarti "bukan")
Kelas singkatan
| Singkatan | Arti | Setara |
|---|---|---|
\d |
Digit apa pun | [0-9] |
\w |
Karakter kata | [A-Za-z0-9_] |
\s |
Whitespace | [ \t\n\r] |
\D |
Bukan digit | [^0-9] |
\W |
Bukan karakter kata | [^A-Za-z0-9_] |
\S |
Bukan whitespace | [^ \t\n\r] |
Quantifier — berapa banyak
Quantifier mengontrol berapa kali elemen sebelumnya harus muncul.
| Simbol | Arti | Contoh | Cocok dengan |
|---|---|---|---|
* |
Nol atau lebih | ab*c |
"ac", "abc", "abbc" |
+ |
Satu atau lebih | ab+c |
"abc", "abbc" (bukan "ac") |
? |
Nol atau satu | colou?r |
"color" dan "colour" |
{3} |
Tepat 3 | \d{3} |
"123", "456" |
{2,4} |
Antara 2 dan 4 | \d{2,4} |
"12", "123", "1234" |
Anchor — posisi
^— awal string (atau baris, dengan flagm)$— akhir string (atau baris)\b— batas kata
Pola ^\d{4}$ cocok dengan string yang persis empat digit, seperti "2026", tapi bukan "abc2026" atau "2026xyz".
Grup dan alternasi
(abc)— menangkap "abc" sebagai grupa|b— cocok "a" atau "b"(cat|dog)— cocok "cat" atau "dog"
Grup juga memungkinkan Anda menerapkan quantifier ke rangkaian: (ha)+ cocok "ha", "haha", "hahaha".
Pola praktis umum
Validasi email (dasar)
^[\w.-]+@[\w-]+\.\w{2,}$
Ini cocok dengan user@example.com, first.last@company.co.uk (sebagian), dan menolak string tanpa @ atau domain.
Penting: Memvalidasi alamat email secara sempurna dengan regex terkenal sulit — spesifikasi lengkap RFC 5322 sangat kompleks. Untuk sistem produksi, gunakan regex dasar untuk pemeriksaan format lalu verifikasi alamat dengan mengirim email konfirmasi.
Mencocokkan nomor telepon
\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}
Ini menangani format seperti +1 555 123 4567, 555-123-4567, dan (555) 123-4567.
Mencocokkan URL
https?://[\w.-]+(/[\w./?&=-]*)?
Cocok dengan https://example.com, http://example.com/path?q=hello.
Mencocokkan tanggal (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
Cocok dengan 2026-03-29, 1999-12-31. Catatan: ini hanya memeriksa format, bukan validitas — ia juga cocok dengan 9999-99-99.
Flag yang mengubah perilaku
Sebagian besar mesin regex mendukung flag yang memodifikasi cara pola diterapkan:
| Flag | Nama | Efek |
|---|---|---|
g |
Global | Temukan semua kecocokan, bukan hanya yang pertama |
i |
Case-insensitive | hello cocok "Hello", "HELLO", dll. |
m |
Multiline | ^ dan $ cocok awal/akhir setiap baris |
s |
Dotall | . juga cocok karakter newline |
Di JavaScript, flag ditambahkan setelah garis miring penutup: /hello/gi. Di Python, mereka dikirim sebagai argumen: re.findall(r"hello", text, re.IGNORECASE).
Kapan regex berlebihan
Regex sangat kuat, tapi tidak selalu alat yang tepat:
- Parsing HTML atau XML. Gunakan parser DOM yang tepat. Regex tidak bisa menangani tag bersarang secara andal.
- Parsing JSON. Gunakan
JSON.parse()atau yang setara. Regex akan gagal di kasus tepi. - Validasi kompleks. Jika pola Anda meliputi beberapa baris dan butuh lima menit untuk dibaca, pertimbangkan menulis kode validasi prosedural.
- Operasi string sederhana. Jika Anda hanya butuh
startsWith(),includes(), atausplit(), metode string biasa lebih jelas dan lebih cepat.
Jebakan umum
- Lupa meng-escape karakter khusus. Titik
.cocok dengan karakter apa pun. Untuk mencocokkan titik literal, gunakan\.. Sama untuk(,),[,],+,*,?,{,},^,$,|, dan\. - Greedy vs. lazy matching. Secara default,
.*bersifat greedy — cocok sebanyak mungkin. Tambahkan?untuk membuatnya lazy:.*?cocok sesedikit mungkin. Ini penting saat mengekstrak konten antar delimiter. - Catastrophic backtracking. Quantifier bersarang seperti
(a+)+dapat menyebabkan mesin mencoba jumlah jalur eksponensial pada input tertentu, membekukan program Anda. Hindari repetisi bersarang pada pola yang overlap. - Lupa anchor. Tanpa
^dan$, pola Anda cocok dengan substring.\d{3}cocok "123" di dalam "abc12345". Gunakan^\d{3}$jika Anda membutuhkan kecocokan tepat.
Pelajari lebih lanjut
Cara terbaik untuk belajar regex adalah bereksperimen. Ketik sebuah pola, tempel beberapa teks uji, dan lihat apa yang menyala. Sesuaikan dan ulangi sampai Anda memahami cara kerja setiap bagian.
- Cara Menguji Pola Regex — tutorial interaktif dengan contoh
- Penguji Regex — tempel pola dan data uji, lihat kecocokan disorot secara real time
