Penguji Regex

Buat dan uji regular expression dengan penyorotan kecocokan secara langsung, capture group, dan pratinjau penggantian.

Berjalan 100% di browser Anda. Apa pun yang Anda tempel tidak diunggah atau disimpan.
//

Kecocokan

Detail kecocokan

#KecocokanIndeksGrup

Ganti

Cara menggunakan penguji regex

  1. Masukkan pola Anda tanpa garis miring di sekelilingnya, misalnya \d{3}-\d{4}.
  2. Aktifkan flag yang Anda perlukan (g, i, m, s, u, y).
  3. Tempel teks uji. Kecocokan disorot secara langsung dan setiap grup tangkapan dicantumkan.
  4. Opsional, masukkan string pengganti, dengan $1 atau $<name> untuk grup, untuk melihat pratinjau hasilnya.

Penguji ini memakai mesin regex JavaScript bawaan browser Anda. Pola dan data uji Anda tetap berada di perangkat Anda dan tidak diunggah atau disimpan.

Sekilas sintaks regex JavaScript

Ragam regular expression berbeda antarbahasa pemrograman. Alat ini memakai ragam JavaScript (ECMAScript), sehingga hasilnya sesuai dengan yang dilakukan RegExp, String.prototype.match, dan replace di browser dan Node.js. Sebagian besar sintaks berlaku juga di Python, PCRE, dan Java, tetapi detail seperti sintaks grup bernama dan dukungan lookbehind berbeda-beda.

Flag

FlagNamaEfek
gglobalMenemukan semua kecocokan, bukan berhenti setelah yang pertama.
iignoreCasePencocokan tidak peka huruf besar-kecil.
mmultiline^ dan $ cocok di awal dan akhir setiap baris.
sdotAll. juga cocok dengan jeda baris.
uunicodeMemperlakukan pola sebagai code point Unicode; mengaktifkan escape properti \p{...}.
ystickyHanya cocok pada posisi yang ditentukan oleh lastIndex.

Blok pembangun

  • Kelas karakter: [abc], rentang [a-z], negasi [^0-9], singkatan \d (digit), \w (karakter kata), \s (spasi putih) dan negasinya \D, \W, \S. Tanpa flag u, \w dan \d hanya mencakup ASCII.
  • Kuantifier: * (0 atau lebih), + (1 atau lebih), ? (0 atau 1), {n}, {n,}, {n,m}. Tambahkan ? untuk membuatnya lazy: .*?.
  • Grup: (...) menangkap, (?:...) mengelompokkan tanpa menangkap, (?<year>\d{4}) membuat grup bernama, dan \1 atau \k<year> merujuk kembali padanya.
  • Anchor: ^, $ dan batas kata \b.
  • Lookaround: (?=...) lookahead positif, (?!...) lookahead negatif, (?<=...) lookbehind positif, (?<!...) lookbehind negatif. Semuanya menguji konteks tanpa menghabiskan karakter.
// Nominal harga yang didahului tanda dolar, tanpa tandanya
/(?<=\$)\d+(?:\.\d{2})?/g     "Total: $42.50"  →  "42.50"

// Ubah format tanggal dengan grup bernama
"2024-03-15".replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, "$<d>.$<m>.$<y>")
// "15.03.2024"

Pola yang umum

TujuanPolaKeterbatasan
Email (sederhana)^[^\s@]+@[^\s@]+\.[^\s@]+$Hanya pemeriksaan kewajaran. Sintaks alamat lengkap jauh lebih rumit; pastikan dengan mengirim email.
Alamat IPv4^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$Menolak oktet di atas 255 dan angka nol di depan. Tidak menangani IPv6.
Tanggal (YYYY-MM-DD)^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$Menerima tanggal yang mustahil seperti 2023-02-31. Validasi dengan pustaka tanggal.
URL (http/https)^https?:\/\/[^\s/$.?#][^\s]*$Pemeriksaan longgar. Gunakan konstruktor URL untuk parsing yang sebenarnya.

Khusus untuk alamat IP, konverter alamat IP mem-parse dan mengonversi IPv4 maupun IPv6.

Jebakan

Catastrophic backtracking

Kuantifier bersarang atau tumpang tindih bisa membuat mesin backtracking seperti milik JavaScript mencoba jalur dalam jumlah eksponensial ketika pencocokan gagal. Beberapa lusin karakter dapat membekukan tab browser atau, di server, memungkinkan serangan denial-of-service (ReDoS):

/^(a+)+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")   // bisa hang

/^a+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")       // seketika

Hindari pola seperti (a+)+, (a|a)*, atau (.*)*, buat alternatif saling eksklusif, dan bersikaplah spesifik: [^"]* lebih aman daripada .* di dalam tanda kutip.

Hal lain yang perlu diwaspadai

  • Regex dengan flag g mengingat lastIndex, jadi memanggil test() berulang kali pada objek yang sama akan bergantian antara true dan false.
  • Saat membangun pola dari string, garis miring terbalik harus digandakan: new RegExp("\\d+").
  • Lupa memakai ^ dan $ berarti validator menerima input apa pun yang sekadar mengandung kecocokan.
Tips: Jangan mem-parse format terstruktur seperti HTML, JSON, atau YAML dengan regular expression. Gunakan parser, atau JSON formatter dan HTML formatter kami untuk memeriksanya.

Pertanyaan yang sering diajukan

Mengapa regex saya berfungsi di sini tetapi tidak di Python atau PHP?

Ragamnya berbeda. Python menulis grup bernama sebagai (?P<name>...) dan hanya mendukung lookbehind berlebar tetap; PCRE milik PHP membungkus pola dalam delimiter. Aturan escape untuk string literal juga berbeda antarbahasa.

Apa perbedaan antara kuantifier greedy dan lazy?

Kuantifier greedy (.*) mencocokkan sebanyak mungkin lalu mundur; yang lazy (.*?) mencocokkan sesedikit mungkin. Pada <b>x</b>, <.*> mencocokkan seluruh string sedangkan <.*?> hanya mencocokkan <b>.

Apakah JavaScript mendukung lookbehind?

Ya, sejak ES2018, dan tidak seperti banyak mesin lain, JavaScript mengizinkan lookbehind dengan panjang variabel. Semua browser utama saat ini mendukungnya.

Bagaimana cara mencocokkan titik atau tanda kurung literal?

Escape karakter itu dengan garis miring terbalik: \., \[, \(. Di dalam kelas karakter, sebagian besar karakter bersifat literal, jadi [.] juga mencocokkan titik.

Diperbarui

Tersalin ke clipboard