Regex Penguji & Debugger
Uji ekspresi reguler dengan penyorotan real-time dan capture group.
Kecocokan Tersorot
Detail Kecocokan
0 matchesReferensi Cepat
.Karakter apa pun kecuali baris baru
\dDigit (0-9)
\wKarakter kata (a-z, A-Z, 0-9, _)
\sSpasi (spasi, tab, baris baru)
^Awal string (atau baris dengan flag m)
$Akhir string (atau baris dengan flag m)
*0 atau lebih dari sebelumnya
+1 atau lebih dari sebelumnya
?0 atau 1 dari sebelumnya
{n,m}Antara n dan m dari sebelumnya
[abc]Character class: a, b, atau c
[^abc]Bukan a, b, atau c
(abc)Capture group
(?:abc)Non-capturing group
a|ba atau b
\bBatas kata
(?=abc)Positive lookahead
(?!abc)Negative lookahead
Tentang Ekspresi Reguler
Ekspresi reguler (regex) adalah pola yang digunakan untuk mencocokkan kombinasi karakter dalam string. Regex adalah alat penting dalam pemrograman, pemrosesan teks, validasi data, dan operasi pencarian. Setiap bahasa pemrograman utama mendukung regex · JavaScript, Python, Java, PHP, Ruby, Go, dan lainnya.
Tester ini menggunakan engine RegExp bawaan JavaScript, yang mendukung sintaks regex ECMAScript termasuk lookahead, character class, quantifier, dan flag g, i, m, dan s. Kecocokan disorot secara real time saat Anda mengetik, dan capture group ditampilkan di panel detail kecocokan.
Penggunaan Umum
- Memvalidasi alamat email, nomor telepon, dan input formulir
- Mengekstrak data dari file log, CSV, atau HTML
- Mencari dan mengganti pola teks di editor kode
- Mengurai URL, path file, dan teks terstruktur
- Menulis selector web scraping dan filter pencarian
Pertanyaan yang Sering Diajukan
Apa fungsi flag g, i, m, dan s?
g (global) menemukan semua kecocokan alih-alih berhenti pada yang pertama. i (case insensitive) mengabaikan huruf besar vs. huruf kecil. m (multiline) membuat ^ dan $ cocok dengan awal/akhir setiap baris. s (dotAll) membuat . juga cocok dengan karakter baris baru.
Apakah regex ini akan bekerja di Python / Java / PHP?
Sebagian besar sintaks regex sama di berbagai bahasa. Namun, ada perbedaan · misalnya, JavaScript tidak mendukung lookbehind di semua browser (meskipun browser modern mendukungnya), dan Python menggunakan sintaks named group yang berbeda. Untuk pola dasar, yang bekerja di sini akan bekerja di mana saja.
Apakah data uji saya dikirim ke mana pun?
Tidak. Semua pencocokan regex terjadi secara lokal di browser Anda menggunakan engine RegExp bawaan JavaScript. Tidak ada yang dikirim ke server mana pun.
Apa itu tester regex?
Tester regex adalah editor interaktif yang menjalankan ekspresi reguler terhadap string sampel dan menunjukkan kepada Anda dengan tepat apa yang cocok, apa yang tidak, dan apa yang terdapat dalam grup tangkapan. Tester memungkinkan Anda mengiterasi dengan cepat: ketik pola, lihat sorotan, sesuaikan, ulangi. Ini menggantikan loop lambat dari mengedit kode sumber, menjalankan skrip, dan membaca output konsol.
Ekspresi reguler sendiri adalah sintaks pola yang ditemukan oleh Stephen Cole Kleene pada tahun 1956 untuk menggambarkan kumpulan string. Implementasi regex modern (PCRE, RegExp JavaScript, re Python, System.Text.RegularExpressions .NET, java.util.regex Java) berbagi sebagian besar sintaksnya tetapi berbeda dalam kasus tepi seperti lookbehind, grup bernama, penanganan Unicode, dan perilaku quantifier.
Tester ini menggunakan mesin RegExp JavaScript native browser Anda, yang mengimplementasikan regex ECMAScript 2024 termasuk semua flag standar (g, i, m, s, u, y, d) dan lookbehind modern. Outputnya persis seperti yang akan dilihat kode front-end Anda saat runtime, yang membuat tester sangat berguna saat melakukan debugging validasi sisi klien, selector scraping, atau transformasi replace-with-callback.
Apa yang ada di dalam tester
Baris atas berisi input pola yang diapit garis miring, diikuti oleh tombol toggle untuk empat flag yang paling banyak digunakan (g, i, m, s). Tombol Patterns membuka library snippet regex umum (email, URL, telepon, tanggal) yang dapat Anda klik untuk mengisi bidang pola. Di balik layar, input di-debounce sehingga mengetik ulang tidak men-thrash matcher.
Di bawah pola, textarea Test String adalah tempat Anda menempelkan teks sampel. Kecocokan disorot dengan latar belakang kuning di panel Highlighted Matches yang diperbarui saat Anda mengetik. Bidang Replace with menerima string penggantian dengan backreference ($1, $2, dll.) dan menunjukkan teks yang dihasilkan secara langsung, sempurna untuk menguji transformasi penggantian string sebelum menempelkannya ke kode Anda.
Daftar Match Details menunjukkan setiap kecocokan dengan indeks berbasis nol di sumber, substring yang cocok, dan setiap grup tangkapan. Kartu Quick Reference di bagian bawah merangkum sintaks untuk kelas karakter, quantifier, jangkar, dan lookaround, sehingga Anda tidak perlu beralih konteks ke tab dokumentasi untuk dasar-dasar.
Sejarah dan latar belakang
Stephen Cole Kleene mendefinisikan peristiwa reguler (1956)
Matematikawan Stephen Cole Kleene menerbitkan makalah Representation of Events in Nerve Nets and Finite Automata pada tahun 1956, memperkenalkan apa yang ia sebut peristiwa reguler: pola yang menggambarkan kumpulan string yang diterima oleh otomat berhingga. Bintang Kleene (operator *) menyandang namanya. Notasi aljabarnya adalah leluhur langsung dari setiap sintaks regex yang digunakan saat ini.
Ken Thompson merilis grep (1968)
Ken Thompson di Bell Labs mengimplementasikan mesin regex pada tahun 1968 di dalam editor QED dan lagi di grep (1973), utilitas Unix yang namanya berasal dari perintah QED g/regular-expression/p. Mesin berbasis NFA Thompson berjalan dalam waktu linear per karakter, sebuah jaminan yang kemudian hilang oleh mesin backtracking ketika mereka menambahkan fitur seperti backreference.
Perl 5 memperkenalkan regex yang diperluas (1994)
Larry Wall merilis Perl 5 pada tahun 1994 dengan rasa regex yang menambahkan lookahead, lookbehind, tangkapan bernama (kemudian), modifier inline, dan backreference. Regex Perl 5 menjadi sangat dominan sehingga bahasa lain menyalin sintaksnya. Philip Hazel menciptakan PCRE (Perl Compatible Regular Expressions) pada tahun 1997 sebagai library C, dan PCRE hari ini menggerakkan regex di PHP, Apache, NGINX, dan banyak alat lainnya.
JavaScript merilis RegExp (1995, diformalkan 1999)
JavaScript 1.0 Brendan Eich pada tahun 1995 dirilis dengan objek RegExp yang dimodelkan setelah Perl 5. Edisi 3 ECMAScript (1999) memformalkan sintaks. Edisi berikutnya menambahkan flag Unicode u (ES2015), flag sticky y (ES2015), grup bernama (ES2018), lookbehind (ES2018), dan flag indices d (ES2022). Browser mengejar seiring waktu, dan mesin modern (V8, SpiderMonkey, JavaScriptCore) mengimplementasikan spesifikasi ES2024 penuh.
ReDoS, regex denial of service (2003 dan seterusnya)
Peneliti memperhatikan bahwa mesin regex backtracking dapat memakan waktu eksponensial pada input tertentu, sebuah kelas kerentanan yang disebut ReDoS (Regular expression Denial of Service). Pemadaman Cloudflare 2019 dilacak ke regex dengan backtracking katastropik. Alat seperti rxxr dan node-re2 muncul untuk mendeteksi atau menghindari masalah, dan mesin mulai menegakkan anggaran waktu pada kecocokan yang berjalan lama.
Escape properti Unicode mendarat di ECMAScript (2018)
ES2018 menambahkan escape properti Unicode seperti \p{Script=Latin} atau \p{Letter}, yang memungkinkan Anda mencocokkan berdasarkan kategori Unicode tanpa menyebutkan titik kode. Dikombinasikan dengan flag u, regex sekarang dapat membedakan emoji dari huruf, skrip satu sama lain, dan menangani pasangan surrogate dengan benar. Ini membuat regex JavaScript akhirnya cocok untuk pencocokan teks internasional, masalah yang tidak dapat diselesaikan oleh sintaks lama hanya-ASCII.
Alur kerja praktis
Validasi email
Jatuhkan sampel email yang valid dan tidak valid ke area uji, ketik regex kandidat Anda (titik awal yang umum adalah ^[^@\s]+@[^@\s]+\.[^@\s]+$), dan sesuaikan sampai email yang valid disorot dan yang tidak valid tidak. Berhati-hatilah bahwa spesifikasi email RFC 5321 lengkap sangat kompleks sehingga regex email yang sempurna memiliki panjang ratusan karakter. Regex pragmatis menangkap kesalahan ketik; validasi akhir harus berputar melalui SMTP aktual.
Parsing dan ekstraksi URL
Tempelkan halaman HTML atau teks biasa dan tulis regex untuk mengekstrak URL. Pola awal seperti https?:\/\/\S+ menangkap sebagian besar kasus. Untuk kode produksi, lebih suka konstruktor URL (new URL(string)) yang menangani setiap kasus tepi; regex adalah yang terbaik untuk ekstraksi cepat satu kali atau analisis log.
Scraping file log
Log Apache dan NGINX mengikuti format tetap. Tempelkan beberapa baris log, tulis regex dengan tangkapan bernama ((?
Temukan dan ganti di editor kode
VSCode, Sublime Text, IDE JetBrains, dan vim semua menerima regex dalam dialog find-replace mereka. Iterasikan pada pola di sini dulu, dengan penyorot langsung yang menunjukkan dengan tepat apa yang cocok, lalu tempelkan regex ke dialog editor. Hindarkan diri Anda dari rasa sakit karena salah menembak pada codebase 5.000 baris.
Web scraping nama kelas CSS
Ketika Anda perlu mengekstrak data dari HTML tanpa parser (skrip satu kali, bukan produksi), regex seperti class="([^"]+)" menarik atribut kelas. Untuk apa pun di luar eksplorasi cepat, beralihlah ke library DOM yang tepat; HTML bukan bahasa reguler dan regex melewatkan kasus tepi.
Memvalidasi string versi semantik
Semver mengikuti ^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$. Jatuhkan daftar versi (1.0.0, 1.2.3-beta.1+build.456) ke area uji untuk memeriksa regex menangkap metadata pra-rilis dan build dengan benar. Ini berguna saat memvalidasi dependensi dalam skrip CI.
Jebakan umum
Quantifier greedy vs lazy
Secara default *, +, dan ? adalah greedy: mereka cocok sebanyak mungkin, lalu mundur jika sisa regex gagal. Versi lazy *?, +?, ?? cocok sesedikit mungkin. Contoh klasik adalah <.*> pada text yang mencocokkan seluruh string, sementara <.*?> hanya mencocokkan dan secara terpisah. Pilih yang tepat untuk menghindari kejutan over-matching.
Backtracking katastropik (ReDoS)
Quantifier bersarang seperti (a+)+ atau (.*)* pada input non-matching yang panjang dapat memakan waktu eksponensial saat mesin mencoba setiap kombinasi. Tab browser mungkin membeku atau crash. Hindari grup quantifier yang tumpang tindih, lebih suka grup atomik (?>...) di mana didukung, atau pra-validasi panjang input. Library npm safe-regex secara otomatis menandai pola berisiko.
Karakter khusus perlu di-escape
Karakter dengan makna khusus dalam regex (. * + ? ^ $ ( ) [ ] { } | \) harus di-escape dengan backslash untuk mencocokkan secara literal. Jadi \. mencocokkan titik, sementara . mencocokkan karakter apa pun. Lupa untuk meng-escape adalah penyebab paling umum dari false positive saat memvalidasi IP, ekstensi file, atau nomor versi bertitik.
Jangkar dan flag multiline
Tanpa flag m, ^ dan $ hanya mencocokkan awal dan akhir seluruh string. Dengan m, mereka mencocokkan awal dan akhir setiap baris. Jika regex Anda bekerja pada baris tunggal tetapi gagal pada input multi-baris, alihkan m. Sebaliknya, jika cocok terlalu banyak pada input multi-baris, hapus m.
Perbedaan sintaks lintas mesin
Tester ini menggunakan regex JavaScript. re Python menggunakan (?P
Unicode tanpa flag u
Tanpa flag u, regex JavaScript memperlakukan pasangan surrogate (emoji, suplemen CJK) sebagai dua unit kode terpisah. \u{1F600} (emoji wajah tersenyum) tidak berfungsi tanpa u. Dengan flag u, regex menjadi sadar Unicode, escape properti seperti \p{Letter} tersedia, dan penanganan pasangan surrogate benar. Selalu atur u saat mencocokkan teks internasional.
Privasi dan penanganan data
Setiap regex dikompilasi dan dieksekusi oleh mesin RegExp browser Anda. Kami tidak mengirim pola Anda, string uji Anda, atau template penggantian Anda ke server mana pun. Matcher berjalan secara lokal, sorotan dirender secara lokal, dan daftar Match Details dihitung secara lokal. Tidak ada analitik yang terkait dengan konten input Anda.
Setelah halaman dimuat, tester bekerja offline. Anda dapat memutuskan dari jaringan, menempelkan baris log sensitif atau PII, dan menjalankan pola terhadapnya tanpa data apa pun yang meninggalkan perangkat Anda. Ini membuat alat aman untuk menguji regex terhadap data produksi tanpa mengirimkannya melalui layanan pihak ketiga.
Saat tidak menggunakan regex
Parsing HTML atau XML
HTML bukan bahasa reguler. Anda tidak dapat dengan andal mem-parse tag bersarang dengan regex; jawaban Stack Overflow yang terkenal tentang Zalgo dan Cthulhu membuat poin ini dengan penuh warna. Gunakan DOMParser atau library seperti cheerio (Node.js) atau BeautifulSoup (Python) sebagai gantinya. Regex baik untuk ekstraksi satu kali tetapi rusak pada kasus tepi seperti tag self-closing, komentar, CDATA, dan input yang salah bentuk.
Apa pun yang benar-benar rekursif (JSON, kode sumber, ekspresi matematika)
Kurung kurawal seimbang, tanda kurung seimbang, panggilan fungsi bersarang, prioritas aritmatika, semua memerlukan tata bahasa bebas konteks, bukan reguler. Gunakan parser combinator (Parsimmon, nom) atau generator (pegjs, antlr). Regex dapat mencocokkan token pembuka atau penutup tetapi tidak dapat melacak keseimbangan.
Ketika operasi string sederhana sudah cukup
Jika Anda perlu memeriksa apakah string dimulai dengan prefix-, gunakan str.startsWith("prefix-"), bukan /^prefix-/. Metode string lebih cepat, lebih jelas, dan tidak mungkin salah dengan quantifier. Cadangkan regex untuk pola yang tidak dapat diungkapkan oleh metode string.
Validasi skema kompleks
Memvalidasi bahwa dokumen JSON memiliki bentuk tertentu (bidang yang diperlukan, tipe bersarang, rentang nilai) jauh lebih baik dilakukan dengan validator JSON Schema (ajv, zod, joi) daripada regex. Regex dapat memeriksa format tetapi bukan struktur, dan regex yang mencoba memvalidasi dokumen JSON adalah mimpi buruk pemeliharaan.
Lebih banyak pertanyaan
Kapan saya harus menggunakan lookahead vs lookbehind?
Lookahead (?=...) menegaskan bahwa apa yang mengikuti cocok tanpa menggunakannya; lookbehind (?<=...) melakukan hal yang sama untuk apa yang mendahului. Gunakan lookahead saat konteks tertinggal menentukan apakah akan dicocokkan, lookbehind saat konteks utama melakukannya. JavaScript mendukung keduanya sejak 2018 (ES2018), dan semua browser modern. Versi Safari yang lebih lama sebelum 16.4 tidak memiliki dukungan lookbehind.
Apakah lookbehind didukung di semua browser?
Lookbehind (positif dan negatif) didukung di Chrome sejak versi 62 (2017), Firefox sejak 78 (2020), Edge sejak 79 (2020), dan Safari sejak 16.4 (2023). Jika audiens Anda mungkin menggunakan Safari yang lebih lama, hindari lookbehind atau polyfill dengan pola alternatif. Untuk Node.js, lookbehind telah didukung sejak 10.0.
Apa yang dilakukan flag Unicode (u)?
Flag u mengaktifkan mode Unicode: pasangan surrogate diperlakukan sebagai satu karakter, escape \u{...} berfungsi, dan escape properti \p{...} tersedia. Tanpa u, emoji seperti wajah tersenyum dihitung sebagai dua unit kode dan . hanya mencocokkan setengah pertama. Selalu atur u saat bekerja dengan teks di luar ASCII.
Seberapa cepat mesin regex?
Mesin RegExp V8 menggunakan implementasi Irregexp yang dikompilasi menjadi kode native. Untuk pola sederhana, mencocokkan jutaan karakter per detik. Pola patologis (quantifier bersarang pada input yang merugikan) dapat meledak ke waktu eksponensial, itulah sebabnya ReDoS adalah vektor serangan yang nyata. Mesin modern menerapkan heuristik untuk mendeteksi dan membatalkan kecocokan yang melarikan diri, tetapi Anda tetap harus menghindari pola berisiko.
Bagaimana regex JavaScript dan Python berbeda?
Grup bernama menggunakan sintaks berbeda (?
Bisakah saya menggunakan AI untuk menghasilkan regex sebagai gantinya?
LLM bagus dalam mengusulkan pola regex awal tetapi secara rutin menghasilkan output yang salah secara halus (greedy di mana lazy diperlukan, escape yang hilang, flag yang salah). Gunakan AI untuk draft pertama, lalu validasi dengan menjalankan regex terhadap sampel nyata di tester ini. Iterasi sampai sorotan persis cocok dengan apa yang Anda harapkan. Lingkaran umpan balik interaktif menangkap kesalahan LLM sebelum mereka dikirim ke produksi.
Alat Terkait
Pemformat & Validator JSON Gratis Online
Format, minify, dan validasi JSON secara instan. Tempel JSON Anda dan dapatkan keluaran yang diformat dengan pesan kesalahan.
Base64 Encoder & Decoder Online Gratis
Encode teks ke Base64 atau decode Base64 ke teks secara instan. Mendukung konversi file-ke-Base64. Gratis, tanpa pendaftaran, berjalan di browser Anda.
Pengonversi Kasus Teks
Konversi teks antara HURUF BESAR, huruf kecil, Urutannya Kapitalisasi, Kalimat biasa, camelCase, PascalCase, snake_case, kebab-case, dan lainnya.