Pack Camo

Regex Tester untuk JavaScript

Uji regular expression JavaScript dengan match, grup, dan replace secara langsung. Semuanya berjalan di perangkat Anda — tidak ada yang diunggah.

Masuk
Pattern · flags · test text
Keluar
Matches · groups · replaced text

Teks uji

Menjadwalkan, bukan mencocokkan? Buka Cron Expression Generator

Uji regular expression saat Anda mengetik

Regex tester ini menjalankan pola Anda dengan engine JavaScript di browser Anda sendiri, yang sama dengan yang akan dipakai kode Node.js atau front-end Anda, dan menyorot setiap match di teks uji saat Anda mengetik. Di sampingnya Anda mendapat daftar match beserta posisi dan capture group-nya, pratinjau replace, dan penjelasan baris demi baris tentang fungsi setiap bagian pola. Pola dan teks Anda tidak pernah meninggalkan halaman.

Cara menguji regex

  1. Ketik pola di antara garis miring, tanpa /…/ di sekelilingnya, atau muat dari menu Pola umum.
  2. Aktifkan atau matikan flag: g untuk menemukan setiap match, i untuk mengabaikan huruf besar-kecil, m agar ^ dan $ bekerja per baris, dan seterusnya.
  3. Tempel atau ketik teks uji Anda. Match disorot dengan warna bergantian agar match yang bersebelahan tetap bisa dibedakan.
  4. Buka Match untuk posisi dan grup setiap match, Penjelasan untuk uraian dalam bahasa sederhana, atau Replace untuk melihat pratinjau substitusi dengan $1, $<name>, atau $&.

Flag di regular expression JavaScript

g (global)
Menemukan setiap match, tidak berhenti di yang pertama. Replace juga mengganti semuanya.
i (ignore case)
Huruf cocok tanpa memedulikan besar-kecil, jadi /cat/i menemukan Cat dan CAT.
m (multiline)
^ dan $ cocok di awal dan akhir setiap baris, bukan hanya seluruh teks.
s (dotAll)
Titik juga cocok dengan baris baru, yang biasanya dilewatinya.
u (unicode)
Memperlakukan pola sebagai code point Unicode: emoji dihitung satu karakter dan escape properti \p{…} berfungsi. Sintaksnya lebih ketat.
v (unicodeSets)
Penerus u yang lebih baru dan lebih ketat, menambahkan operasi himpunan seperti [\p{L}--[a-z]] di dalam kelas. Hanya ditampilkan jika browser Anda mendukungnya.
y (sticky)
Setiap match harus dimulai tepat di tempat match sebelumnya berakhir; berguna untuk tokenizer.

Grup, backreference, dan replace

Tanda kurung menangkap: (\d{4})-(\d{2}) menyimpan tahun di grup 1 dan bulan di grup 2. Beri nama grup dengan (?<year>\d{4}) dan grup itu juga tersedia sebagai groups.year di kode dan sebagai $<year> di replacement. Gunakan (?:…) jika Anda butuh pengelompokan untuk alternasi atau quantifier tetapi tidak ingin menangkap.

Di dalam pola, \1 atau \k<name> mencocokkan teks yang sama dengan yang ditangkap grup sebelumnya, begitulah pola kata berulang di pustaka menemukan “the the”. Lookaround seperti (?=…), (?!…), (?<=…), dan (?<!…) menguji apa yang ada sebelum atau sesudahnya tanpa mengonsumsinya; pola kata sandi kuat memakai empat lookahead untuk mewajibkan setiap jenis karakter.

Di string replacement, $& menyisipkan seluruh match, $1–$99 grup bernomor, $<name> grup bernama, $` dan $' teks sebelum dan sesudah match, dan $$ tanda dolar biasa.

Quantifier: greedy dan lazy

Quantifier menyatakan berapa kali item sebelumnya boleh berulang: * nol kali atau lebih, + satu kali atau lebih, ? nol atau satu kali, dan {2,5} antara dua dan lima kali. Secara bawaan quantifier bersifat greedy dan mengambil teks sebanyak mungkin, lalu mengembalikan sebagian jika sisa pola gagal. Tambahkan tanda tanya untuk membuatnya lazy: <.+?> mencocokkan satu tag HTML, sedangkan <.+> berjalan dari < pertama hingga > terakhir di baris itu.

Tab Penjelasan menguraikan ini untuk setiap quantifier di pola Anda, jadi Anda bisa langsung melihat bagian mana yang berulang, seberapa sering, dan apakah greedy atau lazy. Character class seperti [A-Za-z0-9_] dicantumkan per rentang, dan escape seperti \d, \w, dan \s diberi nama, sehingga pola warisan dari orang lain jauh lebih cepat dibaca.

Catastrophic backtracking, dan kenapa tester ini tidak akan macet

Sebagian pola butuh waktu eksponensial pada input yang hampir cocok. Contoh klasiknya (a+)+$ terhadap deretan panjang huruf a yang diikuti b: engine mencoba setiap cara membagi huruf a antara pengulangan dalam dan luar sebelum menyerah. Di produksi ini risiko denial-of-service yang nyata, dikenal sebagai ReDoS.

Di sini pencocokan berjalan di worker latar terpisah dengan batas waktu. Jika sebuah pola terlalu lama, worker dihentikan dan Anda melihat peringatan, bukan tab yang macet. Perbaikan yang biasa adalah membuang quantifier bersarang atas karakter yang sama, membuat alternatif saling eksklusif, atau menambatkan pola. Hasil dibatasi hingga 10.000 match.

Alternatif regex101 yang fokus pada JavaScript

Alat seperti regex101 mendukung beberapa varian regex; alat ini sengaja hanya mendukung satu, engine ECMAScript di browser Anda, jadi yang cocok di sini juga cocok di JavaScript dan TypeScript. Fitur PCRE seperti possessive quantifier, atomic group, dan rekursi tidak tersedia di JavaScript, dan penjelas akan memperlakukan sintaksnya secara harfiah. Pustaka berisi pola yang dicari orang setiap hari: email, URL, alamat IPv4 dan IPv6, tanggal ISO, warna hex, UUID, nomor telepon E.164, slug, waktu 24 jam, dan kata sandi kuat. Masing-masing adalah pola pragmatis, bukan tata bahasa RFC lengkap; validasi input penting dengan parser khusus juga.

Bekerja dengan jadwal, bukan string? Cron Expression Generator menjelaskan sintaks cron dengan cara yang sama seperti alat ini menjelaskan regex.

Pertanyaan yang sering diajukan

Varian regex apa yang dipakai tester ini?
JavaScript (ECMAScript), dijalankan oleh engine browser Anda sendiri. Hasilnya sama dengan yang dilakukan RegExp, String.prototype.match, dan replace di Node.js, Deno, Bun, dan browser dengan versi yang sama.
Bagaimana cara mencocokkan lintas beberapa baris?
Aktifkan flag m agar ^ dan $ cocok di setiap baris, dan flag s jika titik juga harus cocok dengan baris baru. Tanpa s, gunakan [\s\S] untuk mencocokkan karakter apa pun termasuk baris baru.
Bagaimana cara memakai named capture group di replacement?
Beri nama grup dengan (?<name>…) dan rujuk sebagai $<name> di string replacement. Grup bernomor adalah $1, $2, dan seterusnya, dan $& menyisipkan seluruh match.
Kenapa regex saya hanya menemukan match pertama?
Tanpa flag g, regex JavaScript berhenti setelah match pertama, dan replace hanya mengganti yang itu. Aktifkan g untuk menemukan dan mengganti setiap kemunculan.
Apa itu catastrophic backtracking?
Itu terjadi saat pola dengan quantifier bersarang atau tumpang-tindih, seperti (a+)+, membuat engine mencoba jumlah jalur eksponensial pada input yang hampir cocok. Tester ini menghentikan proses seperti itu setelah batas waktu, bukan membuat halaman macet.
Regex apa yang bagus untuk alamat email?
Pola praktisnya [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}, yang ada di pustaka. Tidak ada regex yang sepenuhnya menerapkan standar email, jadi satu-satunya uji nyata sebuah alamat adalah mengirim email konfirmasi ke sana.
Apakah data uji saya dikirim ke suatu tempat?
Tidak. Pencocokan, replace, dan penjelasan semuanya berjalan di browser Anda, jadi Anda bisa menguji pola terhadap log atau data pelanggan dengan aman.