Diagram Railroad Regex
Ubah regular expression JavaScript menjadi diagram railroad yang jelas dengan grup, alternatif, loop, dan lookaround, lalu ekspor sebagai SVG atau PNG.
Flag: salah satu dari d g i m s u v y. Anda juga bisa menempelkan literal seperti /\d+/g.
- Grup penangkap
- –
- Alternatif
- –
- Kuantifier
- –
Diagram railroad
Biru: teks literal. Hijau: jenis dan himpunan karakter (merah: himpunan yang dikecualikan). Ungu: anchor dan batas. Oranye: back-reference. Kotak putus-putus: grup dan lookaround. Jalur di atas sebuah elemen melewatinya, jalur di bawahnya mengulanginya.
Cara memvisualisasikan regular expression
- Ketik atau tempel pola Anda di Regular expression. Anda juga bisa menempelkan literal JavaScript lengkap seperti
/^\d{3}-\d{4}$/gm: garis miring akan dihapus dan flag otomatis dipindahkan ke kotak flag. - Tambahkan flag jika perlu (salah satu dari
d g i m s u v y). Flag mengubah cara beberapa bagian digambar: denganm,^dan$menjadi “awal baris” dan “akhir baris”; dengans, titik menjadi “karakter apa pun”. - Diagram diperbarui saat Anda mengetik. Gambar diagram menggambar ulang sesuai permintaan, dan Contoh berikutnya menampilkan bergantian beberapa pola umum (email, nomor telepon, warna hex, harga, tag HTML, URL).
- Baca diagram dari kiri ke kanan, dari titik penuh ke titik bercincin. Setiap jalur yang bisa Anda ikuti adalah string yang bisa dicocokkan oleh pola tersebut.
- Gunakan Unduh SVG untuk gambar vektor yang tajam (dokumentasi, slide), Unduh PNG untuk gambar beresolusi ganda, atau Salin kode SVG untuk menempelkan markup-nya ke halaman web.
Arahkan kursor ke sebuah kotak untuk melihat bagian pola asalnya beserta posisinya.
Cara membaca diagram railroad
Diagram railroad, juga disebut diagram sintaksis, menggambarkan sebuah tata bahasa sebagai kumpulan jalur rel. Regular expression adalah tata bahasa semacam itu, sehingga gambarnya menunjukkan struktur jauh lebih baik daripada sebaris simbol yang padat:
- Kotak biru adalah teks literal yang harus muncul persis seperti ditulis, misalnya
“@”. - Kotak hijau adalah jenis karakter (
\ddigit,\wkarakter kata,.karakter apa pun…) dan kelas karakter. Kelas seperti[\w.+-]menjadi kotak berjudul “salah satu dari” yang mencantumkan setiap elemennya; kelas negasi[^…]berwarna merah dan berjudul “bukan salah satu dari”. - Pil ungu adalah anchor dan batas: awal dan akhir teks atau baris, serta batas kata
\b. Elemen ini mencocokkan posisi, bukan karakter. - Kotak oranye putus-putus adalah back-reference seperti
\1atau\k<name>: teks yang sama dengan yang dicocokkan sebuah grup sebelumnya. - Bingkai putus-putus adalah grup. Grup penangkap diberi nomor sesuai urutan kurung bukanya (“grup #2 “domain””); grup non-penangkap
(?:…)tidak dibingkai. Lookahead dan lookbehind mendapat bingkai merah muda berlabel “diikuti oleh” atau “didahului oleh”, karena keduanya memeriksa teks tanpa mengonsumsinya. - Jalur paralel adalah alternatif yang dipisahkan
|. - Jalur di atas sebuah elemen memungkinkan Anda melewatinya (
?,*,{0,n}). Jalur di bawah dengan panah berputar kembali untuk mengulanginya (+,*,{n,m}). Jumlah selain yang biasa ditulis di bawah loop, misalnya “2 hingga 5 kali”, dan kuantifier lazy (+?,*?) ditandai “lazy”.
Pesan kesalahan dengan posisi
Pola diperiksa oleh mesin regular expression JavaScript milik browser Anda sendiri, sehingga apa yang diterima alat ini persis sama dengan yang diterima new RegExp() dengan flag yang sama. Saat mesin menolaknya, alat ini menunjuk karakter yang bermasalah beserta posisinya dan tanda caret di bawah pola. Alat ini mengenali ) tanpa pasangan, grup yang tidak pernah ditutup, kelas karakter yang kehilangan ], kuantifier tanpa sesuatu untuk diulang (*a, a|+), backslash tunggal di akhir, dan kuantifier {n,m} dengan n lebih besar daripada m. Kesalahan lain, seperti back-reference ke nama grup yang tidak ada, ditampilkan dengan pesan dari browser.
Ekspresi hanya dikompilasi untuk memvalidasinya: ekspresi tidak pernah dijalankan terhadap teks apa pun, dan tidak ada yang keluar dari browser Anda.
Pertanyaan yang sering diajukan
Varian regex apa yang didukung alat ini?
Regular expression JavaScript (ECMAScript), termasuk grup bernama, lookbehind, escape properti Unicode \p{…}, dan flag v dengan kelas bersarang. Pola dari PCRE, Python, atau Java biasanya juga bisa, tetapi sintaksis khusus mesin tersebut, seperti kuantifier posesif atau (?P<name>…), ditolak karena browser tidak mendukungnya.
Mengapa grup non-penangkap saya tidak digambar sebagai kotak?
Grup seperti (?:\.[\w-]+) hanya mengelompokkan elemen agar kuantifier atau alternatif berlaku untuk semuanya. Grup ini tidak menangkap apa pun, sehingga diagram menampilkan isi dan loop-nya tanpa bingkai, agar gambar tetap mudah dibaca. Grup dengan flag inline dibingkai dan diberi label flag tersebut.
Apa bedanya jalur lewati dan loop?
Jalur di atas sebuah elemen berarti “boleh nol kali”, dan jalur di bawahnya berarti “boleh diulang”. ? hanya punya jalur atas, + hanya jalur bawah, dan * punya keduanya. Untuk kuantifier seperti {2,4}, loop-nya berlabel “2 hingga 4 kali”.
Bisakah saya memakai diagram ini di dokumentasi saya?
Bisa. Ekspor SVG adalah file vektor mandiri dengan latar putih dan garis gelap, ideal untuk file README, wiki, dan slide. Ekspor PNG dirender dua kali ukuran gambar di layar agar tetap tajam di layar berkepadatan tinggi.
Apakah ada batas ukuran?
Pola boleh sepanjang 5.000 karakter. Ekspresi yang sangat panjang menghasilkan diagram lebar yang bisa Anda gulir secara horizontal; memecahnya menjadi bagian-bagian bernama sering membuat diagram maupun regex-nya lebih mudah dirawat.
Alat terkait
- Regex Tester Tes regular expression JavaScript secara langsung dengan kecocokan yang disorot, grup tangkapan, penggantian teks, dan penjelasan setiap token.
- JavaScript AST Explorer Tempel JavaScript dan jelajahi abstract syntax tree-nya (ESTree, di-parse oleh Acorn) di browser. Klik node untuk melihat kodenya dan ekspor AST sebagai JSON.
- JSON Formatter dan Validator JSON formatter dan validator gratis untuk merapikan, minify, dan memeriksa JSON di browser Anda, dengan kesalahan sintaksis yang dilaporkan per baris dan kolom.