Regular Expression Dijelaskan: Panduan Praktis untuk Developer
Pelajari 20% sintaks regex yang mencakup 80% kasus penggunaan dunia nyata — karakter class, quantifier, anchor, grup, dan flag — dengan contoh praktis untuk validasi email, nomor telepon, ekstraksi URL, dan lainnya.
Regular expression adalah salah satu alat yang developer entah mencintai atau sepenuhnya menghindari. Tampilannya mengintimidasi — serangkaian karakter khusus yang padat yang tampaknya menantang semua keterbacaan — tetapi model dasarnya sederhana. Begitu Anda memahami cara kerjanya, regex yang dibuat dengan baik menjadi salah satu alat satu baris yang paling kuat dalam seluruh toolkit Anda.
Panduan ini memotong kebisingan. Daripada mengkatalog setiap fitur regex, ini berfokus pada 20% sintaks yang menangani 80% kasus penggunaan dunia nyata: karakter class, quantifier, anchor, grup, dan flag. Sepanjang jalan, Anda dapat menguji setiap contoh dalam BrowseryTools Regex Tester — gratis, tanpa pendaftaran, semuanya tetap di browser Anda.
Apa Itu Regular Expression?
Regular expression adalah pola yang mendeskripsikan sekumpulan string. Ketika Anda menerapkan regex ke sepotong teks, Anda bertanya: "apakah string ini cocok dengan pola saya?" — atau secara lebih praktis: "temukan semua substring yang cocok dengan pola saya." Pola itu sendiri ditulis dalam mini-bahasa kompak yang didukung secara native oleh sebagian besar bahasa pemrograman.
Regular expression berguna kapan pun Anda perlu memvalidasi input (apakah ini alamat email yang valid?), mengekstrak data (tarik semua URL dari blok teks), mengubah teks (ganti semua kemunculan pola), atau memisahkan string pada pembatas yang kompleks. Mereka berjalan di browser, di server, di terminal — di mana saja.
Sintaks Inti: 20% yang Mencakup 80% Kasus
Karakter Literal dan Titik
Sebagian besar karakter dalam regex cocok dengan dirinya sendiri. Pola hellococok dengan string "hello" secara literal. Titik . adalah wildcard universal — cocok dengan karakter tunggal apa pun kecuali baris baru. Jadi h.llo cocok dengan "hello", "hallo", "hxllo", dan seterusnya.
Karakter Class
Tanda kurung siku mendefinisikan karakter class — kumpulan karakter di mana salah satunya dapat cocok di posisi tersebut.
[aeiou]— cocok dengan vokal tunggal apa pun[a-z]— cocok dengan huruf kecil apa pun (sintaks rentang)[A-Za-z0-9]— cocok dengan karakter alfanumerik apa pun[^0-9]—^di dalam tanda kurung menegasikan class; cocok dengan apa pun yang BUKAN digit
Class singkatan mencakup kasus yang paling umum: \d cocok dengan digit apa pun (sama dengan [0-9]), \w cocok dengan karakter kata apa pun (huruf, digit, underscore), dan \s cocok dengan spasi putih apa pun. Inversi huruf besar mereka — \D, \W, \S — cocok dengan yang berlawanan.
Quantifier
Quantifier mengontrol berapa kali elemen sebelumnya harus muncul.
*— nol kali atau lebih+— satu kali atau lebih?— nol atau satu kali (membuat sesuatu opsional){3}— tepat 3 kali{2,5}— antara 2 dan 5 kali (inklusif){3,}— 3 kali atau lebih
Secara default, quantifier bersifat greedy — mereka mencocokkan sebanyak mungkin. Menambahkan ? setelah quantifier membuatnya lazy: .*? mencocokkan sesedikit mungkin. Perbedaan ini sangat penting saat mengekstrak konten antara pembatas.
Anchor
Anchor tidak mencocokkan karakter; mereka mencocokkan posisi dalam string.
^— awal string (atau awal baris dalam mode multiline)$— akhir string (atau akhir baris dalam mode multiline)\b— batas kata — posisi antara karakter kata dan karakter non-kata
Anchor sangat penting untuk validasi. Tanpa anchor, pola \d+ akan cocok dengan digit dalam "abc123xyz". Dengan anchor — ^\d+$ — pola hanya cocok dengan string yang seluruhnya terdiri dari digit.
Grup dan Alternasi
Tanda kurung membuat grup penangkap. Mereka melayani dua tujuan: mengelompokkan sub-ekspresi sehingga quantifier berlaku untuk seluruh grup, dan menangkap substring yang cocok untuk ekstraksi.
// Grup dengan quantifier: cocok dengan satu atau lebih pengulangan "ab"
/(ab)+/ → cocok dengan "ab", "abab", "ababab"
// Alternasi dengan |: cocok dengan "cat" atau "dog"
/(cat|dog)/ → cocok dengan "I have a cat" dan "I have a dog"
// Grup penangkap bernama
/(?<year>d{4})-(?<month>d{2})-(?<day>d{2})/Grup non-penangkap — (?:...) — mengelompokkan tanpa menangkap, yang lebih bersih ketika Anda hanya membutuhkan perilaku pengelompokan dan tidak perlu mengekstrak teks yang cocok.
Contoh Praktis
Validasi Email
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/Pemecahannya: ^ mengangkur ke awal. [a-zA-Z0-9._%+-]+ cocok dengan bagian lokal (satu atau lebih karakter yang diizinkan). @ adalah tanda at literal. [a-zA-Z0-9.-]+ cocok dengan nama domain. \.adalah titik literal (di-escape, karena . tanpa escape berarti "karakter apa pun"). [a-zA-Z]{2,} cocok dengan TLD dengan setidaknya 2 huruf. $ mengangkur ke akhir.
Nomor Telepon (Format AS)
/^+?1?s?((?d{3})?[s.-]?)(d{3}[s.-]?d{4})$/Ini cocok dengan format seperti 555-867-5309, (555) 867-5309, +1 555 867 5309, dan 5558675309. Trik utamanya adalah menggunakan ? untuk membuat pemisah opsional dan mengelompokkan kode area dengan tanda kurung opsional.
Mengekstrak URL dari Teks
/https?://[^s"'<>]+/g
https? cocok dengan "http" dan "https" (s bersifat opsional). :\/\/ cocok dengan "//" literal dengan slash yang di-escape. [^\s"'<>]+ cocok dengan semua yang bukan spasi putih atau karakter yang biasanya mengakhiri URL. Flag g menemukan semua kecocokan, bukan hanya yang pertama.
Flag Regex
Flag mengubah cara seluruh pola diterapkan.
g(global) — temukan semua kecocokan, bukan hanya yang pertamai(case-insensitive) — perlakukan huruf besar dan kecil sebagai setara;/hello/icocok dengan "Hello", "HELLO", dan "hello"m(multiline) — membuat^dan$cocok dengan awal/akhir setiap baris daripada seluruh strings(dotAll) — membuat.juga cocok dengan baris baru, berguna untuk pencocokan antar jeda baris
Dalam JavaScript, flag ditempatkan setelah slash penutup: /pattern/gi. Dalam Python, mereka diteruskan sebagai argumen kedua: re.findall(pattern, text, re.IGNORECASE).
JavaScript vs Python: Perbedaan Utama
Sintaks regex sebagian besar sama antara JavaScript dan Python, tetapi ada beberapa perbedaan penting.
- Grup bernama: JavaScript menggunakan
(?<name>...), Python menggunakan yang sama. Keduanya mengembalikan grup bernama tetapi mengaksesnya secara berbeda —match.groups.namedalam JS,match.group('name')dalam Python. - Lookahead / lookbehind: Keduanya mendukung
(?=...)(positive lookahead) dan(?!...)(negative lookahead). Python juga mendukung lookbehind dengan panjang variabel; engine JavaScript yang lebih lama tidak. - Unicode: JavaScript memerlukan flag
uuntuk menangani properti escape Unicode seperti\p{Letter}. ModulrePython menangani Unicode secara default. - Raw string: Dalam Python, selalu gunakan raw string (
r"\d+") untuk menghindari double-escaping backslash. Dalam JavaScript, Anda menggunakan sintaks literal/\d+/atau string"\\d+"saat membuat dengannew RegExp().
Kesalahan Regex Umum
- Backtracking katastrofik — pola seperti
(a+)+pada string yang tidak cocok dapat menyebabkan backtracking eksponensial, mengunci engine. Hindari quantifier bersarang pada pola yang tumpang tindih. - Lupa meng-escape titik —
3.14sebagai pola cocok dengan "3X14" karena.adalah wildcard. Gunakan3\.14untuk mencocokkan titik literal. - Tidak mengangkur pola validasi — tanpa
^dan$, pola yang dimaksudkan untuk memvalidasi seluruh string akan cocok dengan string mana pun yang mengandung pola sebagai substring. - Menggunakan regex untuk parsing HTML — regex tidak dapat menangani struktur yang bersarang secara arbitrer. Gunakan parser HTML yang tepat (DOMParser di browser, BeautifulSoup di Python) untuk HTML.
Uji Pola Anda Dengan Aman di Browser
Menulis regex dalam editor tanpa loop umpan balik itu menyakitkan. Anda menulis pola, menjalankan kode, melihatnya gagal, menyesuaikan pola, menjalankan lagi. Tester regex langsung mempersingkat loop ini — Anda melihat kecocokan yang disorot secara real-time saat Anda mengetik.
BrowseryTools Regex Tester memungkinkan Anda menulis pola, menempel string test, dan melihat semua kecocokan yang disorot secara instan. Ia berjalan sepenuhnya di browser Anda, sehingga Anda dapat menguji terhadap data nyata — log, input pengguna, string produksi — tanpa mengirim apa pun ke server.
Ringkasan
Regular expression memberikan manfaat atas waktu yang Anda investasikan untuk mempelajarinya. Kosakata inti — karakter class, quantifier, anchor, grup, dan flag — itu kecil. Pola yang dapat Anda bangun darinya itu luas. Mulailah dengan contoh-contoh dalam panduan ini, uji terhadap string Anda sendiri, dan sintaksnya akan menjadi intuitif lebih cepat dari yang Anda harapkan.
Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →