Penguji Regular Expression

Ekspresi reguler (regex) adalah pola untuk mencocokkan teks. Alat ini menganalisis sintaks regex, menjelaskan komponen pola, dan menyediakan area pengujian untuk mencoba pencocokan terhadap teks contoh. Mendukung format regex JavaScript, PCRE, dan Python.

Spesifikasi

Kasus Penggunaan Umum

  • Debug mengapa regex tidak mencocokkan teks yang diharapkan
  • Mempelajari sintaks regex dengan melihat penjelasan
  • Menguji pola sebelum menambahkan ke kode
  • Memvalidasi pola input untuk field form
  • Mengekstrak data dari teks terstruktur (log, CSV, HTML)

Fitur

  • Mendeteksi format regex (JavaScript /pattern/flags, PCRE #pattern#, Python r"pattern")
  • Menjelaskan komponen pola dalam bahasa yang mudah dipahami
  • Menguji terhadap teks contoh dengan penyorotan kecocokan
  • Mode kecocokan tunggal atau temukan semua kecocokan
  • Menampilkan grup tangkapan dan isinya
  • Tampilan grup tangkapan bernama
  • Menampilkan posisi dan indeks kecocokan
  • Tampilan waktu eksekusi regex
  • Lencana fitur pola (jangkar, quantifier, dll.)
  • Peringatan pola
  • Library pola umum (email, URL, telepon, dll.)

Contoh

Pola Email

Coba →

Regex untuk mencocokkan alamat email.

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/i

Pola URL

Coba →

Regex untuk mencocokkan URL HTTP/HTTPS.

/https?:\/\/[^\s]+/g

Pola Tanggal

Coba →

Regex untuk tanggal YYYY-MM-DD dengan grup tangkapan.

/(\d{4})-(\d{2})-(\d{2})/

Tips

  • Gunakan penguji online untuk debug pola kompleks sebelum produksi.
  • Escape karakter khusus (. ^ $ * + ? { } [ ] \ | ( )) dengan backslash.
  • Grup tangkapan bernama (?<name>...) membuat kecocokan lebih mudah dibaca.
  • Flag g menemukan semua kecocokan; tanpanya, hanya kecocokan pertama yang dikembalikan.
  • Hati-hati dengan quantifier rakus (* +); gunakan non-rakus (*? +?) bila sesuai.

Pemahaman Penguji Regular Expression

Ekspresi reguler (regex) adalah bahasa pencocokan pola yang digunakan di hampir setiap bahasa pemrograman, editor teks, dan alat baris perintah. Regex mendefinisikan pola pencarian menggunakan kombinasi karakter literal dan metakarakter yang mencocokkan kelas string. Mereka sangat penting untuk validasi input, ekstraksi teks, operasi cari-dan-ganti, dan analisis log.

Sintaks inti mencakup kelas karakter ([a-z], \\d, \\w, \\s), quantifier (*, +, ?, {n,m}), jangkar (^, $, \\b), alternasi (|), dan pengelompokan dengan tanda kurung. Grup yang ditangkap mengekstrak substring yang cocok dan memungkinkan referensi balik. Lookahead (?=...) dan lookbehind (?<=...) mencocokkan posisi tanpa mengkonsumsi karakter, memungkinkan asersi kompleks tentang konteks sekitar.

Regex JavaScript memiliki flavor sendiri dengan flag spesifik: g (global), i (tidak peka huruf besar/kecil), m (multibaris), s (dotAll), u (Unicode), dan y (sticky). Flag u semakin penting untuk menangani teks Unicode dengan benar, karena tanpanya, pola mungkin tidak cocok dengan karakter multi-byte dengan benar. Grup tangkapan bernama (?<name>...) meningkatkan keterbacaan dibanding grup bernomor.

Tugas regex umum mencakup validasi email, penguraian URL, mengekstrak data dari teks terstruktur (file log, CSV), dan mengganti pola dalam refactoring kode. Namun, regex memiliki batasan — ia tidak dapat mengurai struktur bersarang seperti HTML atau JSON (gunakan parser yang tepat), dan pola yang terlalu kompleks menjadi tidak terbaca dan sulit dipelihara. Lelucon "sekarang Anda punya dua masalah" mencerminkan tantangan pemeliharaan nyata dengan regex yang kompleks.

HTML adalah bahasa bebas konteks dengan struktur bersarang yang secara fundamental tidak dapat ditangani oleh ekspresi reguler. Regex tidak dapat mencocokkan tag pembuka dan penutup dengan kedalaman nesting arbitrer secara benar. Kasus sederhana mungkin tampak berhasil tetapi rusak pada kasus tepi yang melibatkan tag bersarang, atribut yang mengandung >, atau komentar. Untuk pemrosesan HTML, gunakan parser DOM seperti DOMParser di browser, cheerio untuk Node.js, atau BeautifulSoup untuk Python.

Perbedaan antara quantifier .* (rakus) dan .*? (malas) signifikan untuk perilaku pencocokan. Rakus .* mencocokkan karakter sebanyak mungkin, lalu mundur jika diperlukan. Malas .*? mencocokkan karakter sesedikit mungkin. Dalam string seperti "<b>satu</b><b>dua</b>", pola rakus <b>.*</b> mencocokkan seluruh string, sementara pola malas <b>.*?</b> hanya mencocokkan "<b>satu</b>" pertama. Memilih mode yang salah adalah salah satu sumber paling umum dari perilaku regex yang tidak terduga.

Dalam JavaScript, flag u (/pattern/u) mengaktifkan pencocokan sadar Unicode. Tanpanya, metakarakter . tidak mencocokkan karakter di luar Basic Multilingual Plane (seperti emoji), dan \\w hanya mencocokkan karakter kata ASCII. Flag u membuat quantifier dan kelas karakter menangani surrogate pair dengan benar dan mengaktifkan escape properti Unicode seperti \\p{Letter}. Lookahead (?=...) dan lookbehind (?<=...) adalah asersi zero-width yang memeriksa pola pada posisi tanpa menyertakannya dalam kecocokan. Positive lookahead (?=...) menyatakan apa yang harus mengikuti, sementara negative lookahead (?!...) menyatakan apa yang tidak boleh mengikuti. Misalnya, \\d+(?= dollars) mencocokkan angka yang diikuti oleh " dollars" tetapi hanya menangkap angkanya saja. Lookbehind bekerja dengan cara yang sama tetapi memeriksa teks sebelumnya.

← Kembali ke semua alat