KeroTools

Uji dan Debug Ekspresi Reguler

Uji pola regex dan lihat kecocokan, grup, dan flag secara langsung saat Anda mengetiknya.

//g
2 kecocokan
kecocokan
Contact us at hello@kerotools.com or support@example.org.

Pola dan cuplikan tetap di perangkat Anda

Tidak ada yang perlu dihapus kemudian

Aman untuk cuplikan produksi sungguhan

Jalan di semua browser modern

Cara kerjanya

  1. 1

    Masukkan pola Anda

    Tulis di kolomnya dan setel flag yang Anda maksud pakai di produksi.

  2. 2

    Tempel teks yang representatif

    Sertakan kasus-kasus yang merepotkan dan string yang seharusnya sama sekali tak cocok.

  3. 3

    Baca kecocokan dan grupnya

    Periksa yang ditemukan dan yang dilewati sebelum Anda membawa polanya ke mana pun.

Mengapa memakai alat ini

Tiap kecocokan disorot langsung

Lihat apa yang sebenarnya ditangkap polanya sambil Anda menulisnya, alih-alih menerka dari sintaksisnya.

Grup penangkap diuraikan

Grup bernomor dan bernama didaftar per kecocokan, dan di situlah sebagian besar pola sebenarnya keliru.

Flag yang bisa Anda lihat

Global, tak peka huruf besar-kecil, multiline, dan dotall ditampilkan eksplisit alih-alih terkubur di sebuah pembatas.

Uji juga yang tak boleh cocok

Tempel string yang harus ditolak di samping yang harus cocok — itulah separuh yang orang lewati.

Tidak ada yang diunggah

Polanya dan teks contohnya tetap di browser Anda, dan baris log sungguhan tak pernah sampai ke server.

Gratis tanpa akun

Tanpa pendaftaran, tanpa watermark, dan tanpa batas seberapa banyak yang Anda uji.

Pola yang cocok dengan contoh Anda bukanlah pola yang bekerja

Hampir semua orang menguji dengan cara yang sama: tulis ekspresinya, tempel tiga string yang seharusnya ia tangkap, lihat mereka tersorot, lalu terbitkan. Itu memastikan polanya tak sepenuhnya rusak dan tak memberi tahu Anda apa pun tentang kegagalan yang sungguh akan menggigit. Pertanyaan yang menarik bukanlah apa yang ia cocokkan melainkan apa lagi yang ia cocokkan — masukan yang tak pernah Anda pikirkan lalu menyelip lolos, dan masukan sah yang ia tolak diam-diam. Pola untuk nomor telepon yang berhasil pada empat contoh akan berjumpa dengan awalan internasional, nomor ekstensi, atau spasi di tempat yang tak diduga. Jadi disiplin yang layak diambil adalah menempelkan string yang harus ditolak dengan sengaja, di samping yang harus ditangkap, dan memeriksa kedua daftar itu tiap kali polanya berubah.

Sebagian pola bisa menggantung proses yang menjalankannya

Inilah mode kegagalan yang mengubah sebuah ekspresi reguler menjadi gangguan layanan, dan ia layak diketahui karena tak kelihatan sampai ia terjadi. Sebagian besar mesin mencocokkan dengan penelusuran balik: ketika sebuah cabang gagal, ia mundur lalu mencoba yang lain. Dengan pengukur yang bersarang — sebuah grup berulang yang dirinya sendiri berulang, berbentuk `(a+)+` — jumlah susunan yang harus dicoba tumbuh eksponensial dengan panjang masukannya. Pada string yang cocok ia selesai seketika; pada string yang *nyaris* cocok lalu gagal di ujungnya, ia bisa berjalan lebih lama daripada usia alam semesta. Itu vektor penolakan layanan ketika polanya diterapkan pada masukan pengguna, dan ia telah menjatuhkan layanan besar: baik Cloudflare maupun Stack Overflow menerbitkan laporan pascainsiden yang menisbatkan gangguan global persis kepada hal ini. Kalau pola Anda punya pengukur di dalam grup terukur, ujilah dengan string panjang yang tak cocok sebelum ia mendekati produksi.

Tak ada satu bahasa ekspresi reguler

Sintaksisnya tampak portabel dan sebenarnya tidak. JavaScript, PCRE seperti yang dipakai PHP dan Perl, Python, Java, .NET, dan alat-alat POSIX masing-masing menerapkan dialek berbeda, dan pola berpindah di antaranya dengan perubahan makna yang senyap. Lookbehind adalah jebakan yang umum: ia ada di PCRE sejak berpuluh tahun dan baru belakangan sampai ke JavaScript, jadi pola yang berhasil di penyunting Anda bisa gagal di browser. Go dan beberapa sistem lain memakai RE2, yang rancangannya sama sekali berbeda — ia menjamin waktu linear, jadi penelusuran balik yang katastrofik di atas mustahil, tetapi ia mencapainya dengan membuang referensi balik dan lookaround sepenuhnya. Sintaksis grup bernama, escape properti Unicode, dan bahkan apa yang dicakup `\d` pun beragam. Ujilah pada dialek tempat Anda akan menerapkannya, karena kalau tidak hasilnya adalah lulus di sini dan gagal di sana.

Rakus secara bawaan, dan titik itu lebih sempit daripada dugaan Anda

Dua perilaku bawaan menjelaskan sebagian besar pola yang bertingkah aneh. Pengukur bersifat rakus: `.*` mengambil sebanyak yang ia bisa dan hanya mengembalikan apa yang harus, jadi `<.*>` yang diterapkan pada `<a><b>` mencocokkan seluruh stringnya alih-alih tag pertamanya. Menambahkan tanda tanya membuatnya malas — `<.*?>` — dan mencocokkan tiap tag secara terpisah, yang hampir selalu memang yang dimaksudkan. Bawaan kedua adalah bahwa titik tak mencocokkan ganti baris. Itu tak kelihatan pada contoh satu baris dan menjadi misteri begitu polanya berjumpa dokumen berbaris banyak lalu berhenti di ganti baris pertama; flag dotall memperbaikinya. Sepasang hal terkait layak dijaga jelas: flag multiline mengubah makna `^` dan `$`, mengaitkannya ke tiap baris alih-alih ke seluruh string, dan ia tak berbuat apa pun pada titik.

Untuk apa ekspresi reguler tak boleh dipakai

Nasihat agar tak mengurai HTML dengan regex biasanya disampaikan sebagai lelucon, dan alasan yang mendasarinya justru presisi: HTML bersarang sampai kedalaman sembarang, memadankan tag pembuka dengan penutupnya menuntut penghitungan, dan sebuah ekspresi reguler tak punya ingatan untuk menghitung. Ini bukan soal menulis pola yang lebih baik — kelas bahasanya yang keliru. Alamat surel gagal dengan cara lain. Tata bahasa di RFC 5322 mengizinkan string berkutip, komentar, dan karakter yang tak seorang pun menduga, jadi pola yang benar-benar patuh membentang ribuan karakter dan tetap tak bisa memberi tahu satu hal yang penting, yakni apakah alamatnya menerima surel. Aturan praktis untuk keduanya: pakai pengurai sungguhan untuk markup berstruktur, dan untuk sebuah alamat periksa bahwa ada `@` dengan sesuatu di kedua sisinya, lalu kirim pesan konfirmasi.

Kenapa menguji secara lokal penting untuk jenis teks ini

Polanya sendiri jarang sensitif. Yang Anda tempel untuk mengujinya biasanya sensitif, karena ekspresi reguler hanya layak diuji terhadap masukan yang realistis — artinya baris log sungguhan dengan alamat sungguhan di dalamnya, ekspor catatan pelanggan yang sedang Anda bersihkan, cuplikan data produksi yang Anda salin justru karena contoh buatan tak menangkap masalahnya. Itulah bahan yang membuat pengujiannya bermakna dan bahan yang takkan Anda pilih untuk diserahkan kepada pihak ketiga. Alat ini menjalankan pencocokannya di halaman dan tak mengirimkan polanya maupun cuplikannya, yang bisa Anda pastikan di tab Network pada developer tools.

Kesalahan umum yang sebaiknya dihindari

  • Menguji hanya string yang seharusnya cocok. Kegagalan yang menggigit adalah masukan tak terpikirkan yang menyelip lolos — tempel juga yang harus ditolak, tiap kali polanya berubah.
  • Menyarangkan pengukur di dalam grup terukur. Bentuk seperti `(a+)+` menelusuri balik secara eksponensial pada masukan yang nyaris cocok, sebuah vektor penolakan layanan dengan gangguan global yang terdokumentasi.
  • Menganggap polanya portabel. Lookbehind, grup bernama, dan escape Unicode berbeda antara JavaScript, PCRE, Python, dan RE2 — ujilah pada dialek penerapannya.
  • Lupa bahwa `.` tak mencocokkan ganti baris. Pola yang berhasil di satu baris berhenti di ganti baris pertama sebuah dokumen; yang Anda inginkan adalah dotall, bukan multiline.
  • Mengurai HTML atau memvalidasi surel dengan regex. Penyarangan butuh penghitung yang tak dimiliki regex, dan pola surel yang patuh pun tetap tak bisa mengatakan apakah alamatnya menerima surel.

Perbandingan

AspekAlat iniPenguji daringPanel cari di sebuah editor
Konten dikirim ke serverTidak pernahUmumnya yaTidak
Grup penangkap diuraikanYaUmumnyaJarang
Flag ditampilkan eksplisitYaUmumnyaSebagian
Jalan tanpa membuka proyekYaYaTidak
Akun atau pendaftaranTidak perluKadang dimintaTidak perlu
HargaGratisGratis / paket berbayarGratis / berbayar

Fitur

Penyorotan langsung

Kecocokan ditandai di teks contoh saat polanya berubah, dengan rincian saat disentuh kursor.

Grup bernama dan bernomor

Tiap penangkapan didaftar per kecocokan, jadi Anda bisa melihat grup mana memuat apa.

Semua flag yang umum

Global, abaikan huruf besar-kecil, multiline, dotall, unicode, dan sticky, masing-masing bisa dialihkan sendiri.

Jumlah dan posisi kecocokan

Berapa temuan dan di mana mereka mulai, yang penting ketika Anda mengganti alih-alih mencari.

Galat sintaksis dijelaskan

Tanda kurung yang tak berpasangan atau escape yang buruk mengatakan apa yang salah alih-alih diam-diam tak mencocokkan apa pun.

Mampu menangani masukan panjang

Berkas log utuh bisa ditempel sebagai subjek pengujian tanpa unggahan.

Tanpa instalasi

Tanpa editor, tanpa runtime, tanpa dependensi — jalan di halaman web.

Ramah Arab dan RTL

Antarmuka lengkap dalam delapan bahasa, termasuk Arab kanan-ke-kiri.

Aman secara bawaan

Disajikan lewat HTTPS, tanpa pelacakan konten dan tanpa unggahan ke pihak ketiga.

Siapa yang memakainya

Pengembang

Membenarkan sebuah pola terhadap data cuplikan sungguhan sebelum menaruhnya di dalam kode.

Analis data

Membangun pola ekstraksi untuk kolom yang berantakan dan melihat persis apa yang ia lewatkan.

Administrator sistem

Memeriksa ekspresi penyaring log terhadap baris log yang sebenarnya alih-alih yang direka.

Siapa pun yang sedang belajar ekspresi reguler

Menyaksikan apa yang dilakukan sebuah pola sambil Anda mengubahnya, yang lebih cepat daripada membacanya.

Pertanyaan yang Sering Diajukan

Tidak. Semuanya berjalan lokal di browser Anda — teks Anda tidak pernah diunggah, disimpan, atau dibagikan.

Ya — sepenuhnya gratis, tanpa akun dan tanpa batas.