Lembar Contekan Ekspresi Reguler: Sintaks, Flag, dan Pola Umum
Jawaban Cepat
Regex menggabungkan karakter literal, metakarakter (., \d, \w, \s), bilangan (*, +, ?, {n,m}), jangkar (^, $, \b), dan grup ((...), [...]). Bendera seperti g (global), i (tidak peka huruf besar-kecil), m (multiline) mengubah perilaku pencocokan. Pola pengujian langsung dengan Penguji Regex kami sebelum menyematkannya dalam kode.
Perkenalan
Ekspresi reguler (regex) mendeskripsikan pola teks menggunakan bahasa formal yang ringkas. Mereka didukung oleh setiap bahasa pemrograman modern, editor, dan alat pencarian. Lembar contekan ini adalah referensi untuk sintaksis yang ditentukan oleh ECMAScript (digunakan oleh JavaScript) ditambah pola umum yang dapat Anda salin dan adaptasi. Gunakan Penguji Regex kami untuk mencoba pola apa pun terhadap contoh teks di browser Anda.
Langkah demi Langkah
-
Kelas karakter —mencocokkan sekumpulan karakter
[abc] cocok dengan a, b, atau c. [^abc] cocok dengan apa pun kecuali a, b, c. [a-z] cocok dengan huruf kecil apa pun. Kelas yang telah ditentukan sebelumnya: \d = [0-9], \D = bukan digit, \w = [A-Za-z0-9_], \W = bukan kata, \s = spasi, \S = bukan spasi, . = karakter apa pun kecuali baris baru (gunakan tanda s untuk memasukkan baris baru).
-
Quantifiers —berapa kali mengulang
* = 0 atau lebih. + = 1 atau lebih. ? = 0 atau 1. {n} = tepat n. {n,} = paling sedikit n. {n,m} = antara n dan m. Menambahkan ? untuk pencocokan malas (misalnya *? cocok dengan sesedikit mungkin). Greedy adalah defaultnya dan dapat menyebabkan kemunduran besar pada pola bersarang.
-
Jangkar dan batasan —tempat yang cocok
^ cocok dengan awal string (atau garis dengan bendera m). $ cocok dengan akhir. \b cocok dengan batas kata (antara \w dan \W). \B cocok dengan batas non-kata. Jangkar memiliki lebar nol — jangkar menguji posisi tanpa menggunakan karakter.
-
Grup dan pergantian
(abc) adalah kelompok penangkap; gunakan $1, $2 sebagai pengganti. (?:abc) adalah grup yang tidak menangkap. (?=abc) adalah pandangan ke depan (menegaskan hal berikut). (?!abc) adalah pandangan ke depan yang negatif. (?<=abc) adalah tampilan belakang (ES2018+). a|b adalah pergantian (a atau b).
-
Bendera —mengubah perilaku pencocokan
g = global (temukan semua kecocokan, bukan hanya yang pertama). i = peka huruf besar-kecil. m = multiline (^ dan $ mencocokkan batas garis). s = dotAll (.cocok dengan baris baru). u = unicode (perlakukan pola sebagai titik kode Unicode; diperlukan untuk emoji dan karakter astral). y = lengket (hanya cocok di lastIndex).
Contoh
Cocokkan alamat email (praktis, RFC 5322 disederhanakan)
Masukan: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
Keluaran: Cocok dengan 'user@example.com' dan 'a.b@sub.domain.co' tetapi tidak 'plainaddress' atau '@no-user.com'
Ekstrak semua kode warna hex dari CSS
Masukan: Pattern: /#[0-9a-fA-F]{3,8}\b/g
Keluaran: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']
Validasi tanggal ISO 8601 (YYYY-MM-DD)
Masukan: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
Keluaran: Cocok dengan '28-08-2026' tetapi menolak '01-13-2026' dan '31-02-2026'
Ganti angka dengan # menggunakan grup penangkap
Masukan: 'Pesanan 42 terkirim' digantikan oleh /(\d+)/g →'#$1'
Keluaran: 'Pesanan #42 terkirim'
Masalah Umum
- Pembilang serakah terlalu banyak yang cocok: '<.*>' pada '<a><b>' cocok dengan keseluruhan string '<a><b>' dan bukannya '<a>'. Gunakan '<.*?>' (malas) untuk mencocokkan '<a>' terlebih dahulu.
- Pelacakan mundur yang dahsyat: bilangan bersarang seperti (a+)+b pada input 'aaaaaaaaaaaaaaaa!' dapat memakan waktu eksponensial. Tulis ulang polanya atau gunakan gugus atom/pengukur posesif jika didukung.
- Lupa bendera u untuk Unicode: /^.$/ cocok dengan satu unit kode, jadi emoji seperti '😀' (dua unit kode) gagal tanpa bendera u. Selalu tambahkan u saat mencocokkan karakter astral.
- Membingungkan \b (batas kata) dengan \s (spasi putih): \b cocok antara karakter kata dan non-kata, sehingga berfungsi pada awal/akhir string juga. \s hanya cocok dengan karakter spasi sebenarnya.
Kiat
- Selalu uji regex terhadap sampel yang cocok dan tidak cocok di Penguji Regex kami sebelum menyematkannya dalam kode produksi —kasus tepi mudah untuk dilewatkan.
- Lebih memilih kelas karakter [a-z] daripada pergantian (a|b|...|z) untuk karakter tunggal —kelas lebih cepat dan jelas.
- Gunakan grup non-penangkap (?:...) ketika Anda tidak memerlukan nilai yang ditangkap —penangkapan memiliki biaya kinerja yang kecil dan mengacaukan susunan hasil.
- Kompilasi regex satu kali dengan RegExp() baru atau literal pada cakupan modul, bukan di dalam hot loop —kompilasi ulang pola yang sama pada setiap iterasi akan membuang-buang CPU.