Regex Tester untuk JavaScript

Ketik regular expression dan lihat setiap kecocokan disorot saat Anda mengetik, lengkap dengan capture group, pratinjau penggantian, dan pustaka pola siap pakai.

Berjalan di browser AndaTanpa daftarTidak ada yang diunggah

Kecocokan disorot

    
Gunakan $1, $<name>, $& (seluruh kecocokan)
Detail kecocokan
#IndeksKecocokanGrup
Cheat sheet regex
.Karakter apa pun kecuali baris baru (semua dengan s)
\d \w \sDigit, karakter kata, spasi
\D \W \SBukan digit, bukan kata, bukan spasi
[abc] [^abc]Salah satu dari / bukan a, b, c
[a-z0-9]Rentang karakter
\p{L} \p{N}Huruf / angka Unicode (perlu u)
^ $Awal / akhir input (baris dengan m)
\b \BBatas kata / bukan batas kata
* + ?0 atau lebih, 1 atau lebih, 0 atau 1
{n} {n,} {n,m}Tepat n, minimal n, antara n dan m
*? +? ??Lazy (sesedikit mungkin)
a|ba atau b
(…)Grup tangkapan, dirujuk sebagai $1
(?<name>…)Grup bernama, $<name>
(?:…)Grup non-capturing
\1 \k<name>Backreference
(?=…) (?!…)Lookahead / lookahead negatif
(?<=…) (?<!…)Lookbehind / lookbehind negatif
\. \* \\Karakter literal yang di-escape
\n \t \rBaris baru, tab, carriage return
\uFFFFCode unit Unicode
\u{1F600}Code point (perlu u)
$&Seluruh kecocokan dalam penggantian
$` $'Teks sebelum / sesudah kecocokan

Cara menggunakan Regex Tester

  1. Masukkan pola Anda di antara garis miring, tanpa / di sekelilingnya.
  2. Aktifkan flag seperti g (semua kecocokan), i (abaikan huruf besar/kecil), dan m (multiline).
  3. Tempel teks uji Anda. Kecocokan disorot di kanan dan dicantumkan beserta indeks dan capture group-nya di bawah.
  4. Centang Ganti dan masukkan penggantian seperti $1 atau $<name> untuk mempratinjau String.replace.
  5. Pilih pola dari Pustaka pola untuk memulai dari regex email, URL, IP, atau tanggal yang sudah teruji.

Regular expression JavaScript

Tester ini memakai engine RegExp milik browser Anda sendiri, sehingga hasilnya persis sama dengan yang dikembalikan String.match, matchAll, replace dan RegExp.exec di JavaScript dan Node.js. Termasuk sintaks modern: grup bernama (?<name>…), lookbehind (?<=…), escape properti Unicode seperti \p{L} dengan flag u, dan indeks kecocokan dengan flag d.

Fungsi setiap flag

FlagNamaEfek
gglobalTemukan semua kecocokan, bukan berhenti di yang pertama.
iignoreCaseHuruf cocok tanpa memedulikan kapital.
mmultiline^ dan $ cocok di awal dan akhir setiap baris.
sdotAll. juga cocok dengan pemisah baris.
uunicodeMemperlakukan pola sebagai code point; mengaktifkan \p{…} dan \u{…}.
ystickyHanya mencocokkan di posisi lastIndex saat ini.
dhasIndicesMelaporkan posisi awal dan akhir setiap capture group.

Perlindungan catastrophic backtracking

Pola dengan quantifier bersarang, seperti (a+)+$ atau (\w|\d)*x, bisa memakan waktu eksponensial pada input yang hampir cocok. Di halaman web biasa, ini membuat tab macet. Di sini setiap pencocokan berjalan di Web Worker latar belakang yang dihentikan setelah satu detik, dan Anda mendapat peringatan yang jelas alih-alih browser yang hang. Pola yang sama di kode production bisa menjadi celah ReDoS, jadi anggap peringatan itu sebagai bug yang perlu diperbaiki.

Tips menulis regex yang lebih baik

  • Jangkarkan pola dengan ^ dan $ saat memvalidasi seluruh nilai, jika tidak, kecocokan di mana pun dalam string akan lolos.
  • Utamakan kelas spesifik seperti [^"]* daripada .*; lebih cepat dan menghindari pencocokan berlebih.
  • Gunakan grup non-capturing (?:…) saat Anda tidak memerlukan nilai yang ditangkap.
  • Beri nama grup Anda. match.groups.year lebih mudah dibaca daripada match[1].

Pertanyaan yang sering diajukan

Varian regex apa yang dipakai tester ini?
JavaScript (ECMAScript), melalui RegExp bawaan browser Anda. Sebagian besar sintaks sama dengan PCRE, Python, dan Java, tetapi fitur seperti possessive quantifier, atomic group, dan modifier inline seperti (?i) tidak tersedia di JavaScript.
Mengapa pola saya hanya menemukan satu kecocokan?
Tanpa flag g (global), JavaScript berhenti setelah kecocokan pertama. Aktifkan g untuk menemukan semua kemunculan.
Bagaimana cara merujuk grup dalam penggantian?
Gunakan $1, $2… untuk grup bernomor, $<name> untuk grup bernama, $& untuk seluruh kecocokan, dan $$ untuk tanda dolar literal.
Mengapa tester berhenti karena timeout?
Pola memakan waktu lebih dari satu detik pada input Anda, yang hampir selalu berarti catastrophic backtracking. Cari quantifier bersarang seperti (x+)+ atau alternatif yang tumpang tindih seperti (a|a)* dan tulis ulang agar setiap karakter hanya bisa dicocokkan dengan satu cara.
Apakah data uji saya dikirim ke suatu tempat?
Tidak. Pencocokan berjalan secara lokal di Web Worker di dalam browser Anda. Pola dan teks Anda hanya disimpan di browser Anda sendiri agar masih ada saat Anda kembali.

Tools terkait