Apa arti « menguji ekspresi reguler »?
Menguji ekspresi reguler (« regex test online », « tester regex javascript ») berarti menjalankan sebuah pola terhadap teks nyata dan mengamati persis apa yang dikembalikan mesin: string yang cocok, posisinya, dan nilai grup tangkap. Pola yang « terlihat benar » tidak berarti apa-apa sebelum dijalankan pada data Anda — hanya selisih itulah yang penting antara regex tutorial dan regex produksi.
Pengujian menjawab tiga pertanyaan berbeda. Apakah cocok : tabel kecocokan memberi tahu Anda sejak baris pertama. Di mana dan berapa : indeks dan panjang menunjukkan apakah jangkar berada di tempat yang tepat. Apa yang ditangkap : grup bernomor atau bernama menunjukkan apakah bagian yang ingin Anda ekstrak memang bagian tersebut.
Metakarakter yang membuat semua perbedaan
Titik . menggantikan karakter apa pun kecuali baris baru — maka flag s saat teks Anda multi-baris. Kuantifikator *, + dan ? adalah rakus : kuantifikator berhenti pada jumlah pengulangan pertama yang cukup. Akhiran ? (*?, +?, {2,5}?) membalik perilaku ini dan menghasilkan versi malas, yang hampir selalu lebih disukai ketika sebuah .* melahap akhir baris.
Kurung siku mendefinisikan sebuah kelas: [abc] menerima satu karakter dari yang terdaftar, [^abc] semua kecuali mereka, [a-z0-9] sebuah rentang. Hati-hati dengan negasi di awal kelas — [^...] hanya untuk posisi pertama, jika tidak ^ kembali literal. Pipa | memisahkan alternatif dan berperilaku seperti prioritas rendah: ^cat|dog$ berarti « seluruh teks adalah cat » atau « seluruh teks adalah dog », bukan « cat atau dog di awal atau di akhir » — untuk itu kelompokkan: ^(?:cat|dog)$.
Grup, lookahead dan lookbehind
Kurung buka menangkap. Grup 1 dapat diakses dengan $1 di sisi penggantian dan \1 di sisi pola, grup bernama dengan $<nom> dan \k<nom> — jauh lebih mudah dibaca sejak tiga grup. (?:...) mengelompokkan tanpa membuat nomor, yang sebaiknya dipilih begitu Anda menangkap hanya untuk struktur.
Lookaround (lookaround) memeriksa tanpa mengonsumsi: (?=...) mensyaratkan yang berikut harus cocok, (?!...) melarangnya, (?<=...) dan (?<!...) melakukan hal yang sama untuk yang mendahului. Dengan cara ini Anda mewajibkan karakter khusus dalam kata sandi tanpa menyertakannya dalam tangkapan: ^(?=.*\d)(?=.*[A-Z]).{12,}$.
ReDoS: saat regex menjadi bom waktu
Istilah ReDoS (Regular Expression Denial of Service) berasal dari backtracking : menghadapi input yang hampir cocok, pola seperti (a+)+$ menjelajahi semua cara memotong « a » sebelum akhirnya gagal, dan jumlah ledakannya tumbuh secara eksponensial. Dua kebiasaan: uji pola pada volume realistis — tab Performa melakukannya untuk Anda — dan jangan pernah menjalankan regex yang tidak teraudit pada input dari luar tanpa batas ukuran. Di server, regex yang macet membekukan satu worker utuh hingga timeout berakhir.
JavaScript, PCRE, Python: dasar yang sama, beberapa perbedaan
Penguji menggunakan mesin bawaan browser, yaitu ECMAScript. Sintaks dasar — kelas, kuantifikator, grup, lookahead, flag g i m s u y — umum digunakan di PCRE (PHP, Perl), di Python dengan re, di Java, dan di Go. Perbedaannya terutama pada lookbehind (lama tidak ada di JavaScript, kini didukung), properti Unicode, dan flag sebaris seperti (?i), khusus PCRE. Karena itu menerjemahkan pola dari satu bahasa ke bahasa lain tetap soal detail — bukan kreasi baru.
Direkomendasikan untuk
Pengembang front-end dan back-end (validasi form, parsing log, migrasi data), ops dan DevOps (filter konfigurasi, aturan WAF), QA dan analis (ekstraksi kolom, kontrol format), penulis dan data analyst (pembersihan file), mahasiswa (memahami metakarakter), serta siapa pun yang membutuhkan penguji ekspresi reguler cepat, lengkap, dan rahasia — dilengkapi dengan pemformat JSON, encoder decoder URL, encoder decoder Base64 dan encoder decoder JWT.