Penguji Regex
Ketik pola, centang flag yang Anda perlukan, lalu tempel teks: setiap kecocokan langsung disorot saat Anda mengetik dan dicantumkan beserta posisi dan grup penangkapnya. Pola dijalankan oleh mesin regex JavaScript milik browser Anda sendiri, sehingga hasilnya sama dengan kode Anda dan teks tetap berada di perangkat Anda.
0 karakter · 0 kata · 0 baris
Kecocokan disorot di sini.0 karakter · 0 kata · 0 baris
Berjalan sepenuhnya di tab browser ini. Teks Anda tidak pernah diunggah atau disimpan.
Token regex JavaScript
Kolom kecocokan pertama dihasilkan dengan menjalankan setiap pola pada teksnya menggunakan mesin JavaScript yang membangun halaman ini.
| Token | Arti | Pola | Teks | Kecocokan pertama |
|---|---|---|---|---|
\d | Digit 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Huruf, digit, atau garis bawah (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Whitespace, termasuk tab dan jeda baris | /\s+/ | two spaces | |
. | Karakter apa pun kecuali jeda baris (kecuali dengan s) | /a.c/ | abc a-c | abc |
^ $ | Awal dan akhir input (atau baris, dengan m) | /^\w+$/ | single | single |
[abc] | Salah satu karakter yang tercantum | /[aeiou]/ | rhythm and blues | a |
[^abc] | Karakter apa pun yang tidak tercantum | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 atau lebih, 1 atau lebih, 0 atau 1 | /colou?r/ | color colour | color |
{n,m} | Antara n dan m kali | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Grup penangkap | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Grup penangkap bernama | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Grup tanpa penangkapan | /(?:ab)+/ | ababab! | ababab |
a|b | Salah satu sisi | /cat|dog/ | hotdog | dog |
\b | Batas kata | /\bcat\b/ | concat cat | cat |
(?=…) | Diikuti oleh (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Tidak didahului oleh (negative lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Huruf Unicode apa pun (perlu u) | /\p{L}+/u | naïve 東京 | naïve |
Enam flag regex dan apa yang diubahnya
g (global) menemukan setiap kecocokan alih-alih berhenti di yang pertama; tanpa flag ini daftar hanya berisi satu entri. i mengabaikan huruf besar/kecil. m (multiline) membuat ^ dan $ cocok di awal dan akhir setiap baris, bukan hanya di awal dan akhir seluruh teks, dan itulah yang Anda perlukan untuk pola seperti spasi di akhir baris. s (dotAll, ditambahkan di ES2018) membuat . juga cocok dengan jeda baris. u (unicode) memperlakukan teks sebagai code point, sehingga satu emoji dihitung sebagai satu karakter, dan mengaktifkan property escape seperti \p{L} untuk huruf apa pun dalam aksara apa pun. y (sticky) hanya mencocokkan tepat di posisi saat ini, mode yang dipakai tokenizer. JavaScript juga memiliki d untuk indeks kecocokan dan v untuk operasi himpunan di dalam kelas; penguji ini berpegang pada enam flag di atas.
Di bawah teks uji, setiap kecocokan menampilkan indeks dan grupnya. Grup bernomor berasal dari tanda kurung biasa, (?:…) mengelompokkan tanpa menangkap, dan (?<year>\d{4}) membuat grup bernama yang muncul dengan namanya, seperti diperlihatkan contoh tanggal ISO. Menu Pola umum menyisipkan titik awal yang sudah diuji untuk alamat email, URL, alamat IPv4, warna hex, UUID, kata berulang, dan spasi di akhir baris. Anggap pola email sebagai pemeriksaan kewajaran, bukan validasi: tata bahasa alamat email yang lengkap jauh lebih longgar, dan satu-satunya uji yang sesungguhnya adalah mengirim pesan.
Lookbehind dan catastrophic backtracking
Lookaround menguji apa yang mengelilingi sebuah posisi tanpa mengonsumsinya. Lookahead, (?=…) dan (?!…), sudah lama menjadi bagian JavaScript; lookbehind, (?<=…) dan (?<!…), hadir di ES2018 dan tersedia di semua browser utama ketika Safari 16.4 mendukungnya pada 2023. Jadi (?<=\$)\d+ menemukan 42 dalam "$42" tanpa menyertakan tanda dolar. Berbeda dengan banyak mesin lain, JavaScript mengizinkan lookbehind dengan panjang berapa pun.
Mesin JavaScript bekerja dengan backtracking: ketika satu jalur gagal, mesin mundur dan mencoba alternatifnya. Quantifier bersarang seperti (a+)+$ memberinya jumlah cara yang eksponensial untuk membagi teks yang sama, sehingga string berisi 30 huruf a diikuti x bisa memakan waktu beberapa detik, dan beberapa huruf tambahan bisa memakan waktu berjam-jam. Inilah catastrophic backtracking, dan di server ia menjadi ReDoS, serangan denial of service; satu aturan WAF dengan cacat ini membuat jaringan Cloudflare lumpuh sekitar setengah jam pada 2 Juli 2019. Karena penguji ini berjalan di tab Anda, pola semacam itu dapat membekukan halaman; muat ulang dan tulis ulang polanya agar tidak ada dua quantifier yang dapat mengklaim karakter yang sama, dengan kelas yang lebih ketat seperti [^,]* alih-alih .*, atau dengan anchor. Untuk mengedit teksnya sendiri alih-alih mencocokkannya, lihat alat teks; utilitas developer lainnya ada di halaman alat developer.
Pertanyaan yang sering diajukan
- Mengapa regex saya hanya menemukan satu kecocokan?
- Flag g tidak aktif. Tanpa flag ini, mesin berhenti setelah kecocokan pertama. Centang g untuk menampilkan setiap kemunculan; flag y saja juga menemukan beberapa, tetapi hanya jika kecocokannya berurutan langsung.
- Apakah \d di JavaScript cocok dengan digit dari aksara lain?
- Tidak. Di JavaScript \d hanya berarti 0 sampai 9 dan \w hanya huruf ASCII, digit, dan garis bawah, bahkan dengan flag u. Gunakan \p{Nd} atau \p{L} bersama u untuk aksara lain.
- Apakah pola regex yang diuji di sini berperilaku sama di Python atau PHP?
- Sintaks dasarnya sama, tetapi detailnya berbeda: grup bernama di Python ditulis
(?P<name>…), PHP dan Python mendukung possessive quantifier yang tidak dimiliki JavaScript, dan aturan lookbehind bervariasi. Uji ulang di mesin tujuan. - Bagaimana cara mencocokkan titik atau kurung siku secara harfiah dalam regex?
- Escape dengan garis miring terbalik:
\.cocok dengan titik dan\[dengan kurung siku buka. Di dalam kelas karakter, sebagian besar simbol sudah bersifat harfiah, sehingga[.]juga hanya cocok dengan titik. - Mengapa halaman membeku saat saya mengetik pola regex?
- Pola tersebut kemungkinan memicu catastrophic backtracking pada teks Anda. Muat ulang, lalu hindari quantifier bersarang seperti
(.*)*atau(a+)+dan buat setiap bagian mencocokkan sesedikit mungkin.