Penguji RegEx, Ganti & Contekan
Uji ekspresi reguler dengan kecocokan dan grup tangkapan yang disorot, pratinjau penggantian, dan salin pola sebagai kode untuk enam bahasa.
Detail kecocokan dan grup tangkapan
Contekan
Klik sebuah pola untuk memuatnya bersama teks contoh.
Referensi sintaks
Karakter
| . | Karakter apa pun kecuali pergantian baris (dengan s: termasuk pergantian baris) |
| \d \D | Digit 0–9 / bukan digit |
| \w \W | Karakter kata (A–Z, a–z, 0–9, _) / bukan karakter kata |
| \s \S | Spasi putih / bukan spasi putih |
| [abc] [^abc] | Salah satu dari a, b, c / apa pun kecuali a, b, c |
| [a-z] | Karakter dalam rentang a sampai z |
| \p{L} | Huruf dalam bahasa apa pun (perlu flag u) |
| \. \\ \( | Escape karakter khusus agar dicocokkan apa adanya |
Kuantifier
| * + ? | 0 kali atau lebih / 1 kali atau lebih / 0 atau 1 kali |
| {n} {n,} {n,m} | Tepat n / n atau lebih / antara n dan m |
| *? +? {n,m}? | Malas: cocokkan sesedikit mungkin karakter |
Jangkar
| ^ $ | Awal / akhir teks (setiap baris dengan m) |
| \b \B | Batas kata / bukan batas kata |
Grup & lookaround
| (…) | Grup tangkapan, dipakai sebagai $1, $2 … |
| (?:…) | Grup tanpa tangkapan |
| (?<name>…) | Grup bernama, dipakai sebagai $<name> |
| \1 \k<name> | Backreference: teks yang sama dengan yang dicocokkan grup |
| a|b | a atau b |
| (?=…) (?!…) | Diikuti oleh / tidak diikuti oleh |
| (?<=…) (?<!…) | Didahului oleh / tidak didahului oleh |
Penggantian
| $1 $<name> | Teks grup bernomor atau bernama |
| $& $$ | Seluruh kecocokan / karakter $ |
Cara menggunakan
- Masukkan pola di "Ekspresi reguler" tanpa garis miring pembuka dan penutup serta tanpa flag, lalu tempel teks Anda di "Teks uji". Kecocokan disorot di bawah "Kecocokan" dan dihitung saat Anda mengetik. Untuk memulai dari contoh, klik sebuah pola di "Contekan"; tindakan ini mengganti pola, flag, teks uji, dan pengaturan penggantian yang sedang dipakai.
- Centang flag yang Anda perlukan di "Flag"; arahkan kursor ke sebuah huruf untuk melihat fungsinya. g dan u aktif saat halaman dibuka. Tanpa g, hanya kecocokan pertama yang ditemukan dan hanya kecocokan pertama yang diganti.
- Baca "Detail kecocokan dan grup tangkapan": setiap kecocokan dicantumkan beserta posisinya dan teks setiap grup sebagai $1, $2, dan seterusnya, disertai nama untuk grup bernama. Aktifkan flag d untuk melihat juga posisi awal dan akhir setiap grup.
- Untuk mencoba penggantian, centang "Ganti kecocokan dengan" lalu ketik teks pengganti; gunakan $1 atau $<name> untuk grup. Teks yang telah diubah muncul di bawah "Hasil penggantian", dan "Salin hasil" menyalinnya.
- Di "Pembuat kode", pilih JavaScript, Python, Java, PHP, Go, atau C#, lalu klik "Salin kode". Potongan kode menyertakan penggantian jika "Ganti kecocokan dengan" dicentang. "Salin sebagai /pola/flag" menyalin pola sebagai literal regex JavaScript.
Pertanyaan umum
Apakah teks yang saya uji dikirim ke suatu tempat?
Tidak. Pola dan teks uji dicocokkan di browser Anda oleh mesin regex JavaScript milik browser itu sendiri, dan keduanya tidak diunggah ke LeedyBox. Alat ini juga tidak menyimpannya.
Mengapa pola saya mencocokkan lebih banyak teks daripada yang saya harapkan?
Pola cocok di mana pun ia sesuai, sehingga \d{3} juga menemukan 123 di dalam 12345. Tambahkan \b di kedua ujung untuk kata atau angka utuh, atau gunakan ^ dan $ agar seluruh teks harus cocok (atau setiap baris, jika m aktif), seperti pada pola kata sandi di contekan. \b bergantung pada karakter kata dari \w (A–Z, a–z, 0–9, dan _) dan memperlakukan huruf seperti é atau 한 sebagai karakter bukan kata, sehingga \bcafé\b tidak cocok dengan café jika diikuti spasi. Kuantifier seperti + dan * juga bersifat greedy (rakus): pada <b>x</b>, pola <.+> mencocokkan seluruh string, sedangkan <.+?> atau <[^>]+> berhenti di > yang pertama.
Mengapa pola yang berfungsi di Python, PHP, atau Java menampilkan kesalahan RegEx di sini?
Halaman ini menggunakan mesin JavaScript, yang menolak sebagian sintaks dari mesin lain, seperti grup bernama (?P<name>…), flag inline seperti (?i) di awal pola, grup atomik (?>…), dan kuantifier posesif seperti a++. Tulis grup bernama sebagai (?<name>…) dan gunakan kotak centang di "Flag" sebagai pengganti flag inline. Dengan flag u, JavaScript juga lebih ketat terhadap escape: \# menghasilkan kesalahan, begitu juga \- di luar kurung siku, jadi hapus backslash-nya atau nonaktifkan u.
Mengapa \p{L} tidak cocok dengan huruf, atau emoji dihitung sebagai dua karakter?
Kelas properti Unicode seperti \p{L} memerlukan flag u; tanpa flag itu, JavaScript membaca \p{L} sebagai teks literal p{L}, dan . hanya mencocokkan setengah dari karakter di luar Basic Multilingual Plane, seperti banyak emoji. Memuat pola dari contekan juga memuat flag-nya, dan semua pola kecuali "Karakter khusus" membiarkan u nonaktif, jadi periksa "Flag" sebelum menambahkan sintaks semacam itu. Bahkan dengan u, . mencocokkan satu code point, sedangkan sebagian emoji, seperti bendera atau jempol dengan warna kulit, terdiri dari dua code point atau lebih. Posisi dalam detail kecocokan dihitung dalam unit kode UTF-16, seperti di JavaScript, sehingga karakter di luar Basic Multilingual Plane menempati dua posisi meskipun u aktif.
Mengapa \n di teks pengganti tidak menyisipkan pergantian baris?
Teks pengganti mengikuti aturan replace() di JavaScript: hanya urutan yang diawali $ yang bermakna khusus, sehingga \n dan \t disisipkan sebagai backslash yang diikuti huruf, bukan sebagai pergantian baris atau tab. Kolom ini hanya menampung satu baris, jadi pergantian baris tidak dapat dimasukkan di sini; tambahkan di kode yang dihasilkan. Untuk menghapus kecocokan, centang "Ganti kecocokan dengan" dan biarkan kolomnya kosong, seperti pada pola "Hapus tag HTML/XML" di contekan.
Apa yang terjadi jika pola sangat lambat atau menemukan sangat banyak kecocokan?
Jika browser mengizinkan Web Worker, pencocokan berjalan di worker latar belakang dan dihentikan setelah 2 detik, sehingga pola dengan catastrophic backtracking, seperti (a+)+$ pada deretan panjang huruf a yang diikuti karakter lain, menampilkan pesan alih-alih membuat halaman macet. Jumlah di bawah "Kecocokan" mencakup semua kecocokan, tetapi hanya 1.000 kecocokan pertama yang disorot dan dicantumkan dalam detail.
Bisakah kode yang dihasilkan saya tempel ke proyek apa adanya?
Gunakan sebagai titik awal. Pembuat kode menulis pola sebagai literal regex di JavaScript dan sebagai string di bahasa lain, menulis ulang grup bernama dan referensi pengganti jika sintaksnya berbeda, seperti (?P<name>…) dan \g<1> di Python, memetakan flag i, m, dan s, serta mengharapkan input Anda berada di variabel bernama text. Jika pola berisi tanda kutip atau garis miring, periksa apakah potongan kode meng-escape-nya dengan benar. Mesin regex tetap berbeda-beda: paket regexp milik Go menggunakan sintaks RE2, yang tidak mendukung lookaround atau backreference, dan modul re standar Python tidak mendukung kelas \p{…}, jadi uji kode tersebut dengan data Anda sendiri.