Cara menggunakan Penguji Regex
- Masukkan corak anda di antara garis miring, tanpa
/ di sekelilingnya. - Togol bendera seperti
g (semua padanan), i (abaikan huruf besar/kecil) dan m (berbilang baris). - Tampal teks ujian anda. Padanan diserlahkan di sebelah kanan dan disenaraikan bersama indeks dan kumpulan tangkapan di bawah.
- Tandakan Ganti dan masukkan penggantian seperti
$1 atau $<name> untuk pratonton String.replace. - Pilih corak daripada Pustaka corak untuk bermula dengan regex e-mel, URL, IP atau tarikh yang telah diuji.
Ungkapan nalar JavaScript
Penguji ini menggunakan enjin RegExp pelayar anda sendiri, jadi hasilnya tepat seperti yang dipulangkan oleh String.match, matchAll, replace dan RegExp.exec dalam JavaScript dan Node.js. Ini termasuk sintaks moden: kumpulan bernama (?<name>…), lookbehind (?<=…), escape sifat Unicode seperti \p{L} dengan bendera u, dan indeks padanan dengan bendera d.
Fungsi setiap bendera
| Bendera | Nama | Kesan |
g | global | Cari setiap padanan dan bukannya berhenti pada yang pertama. |
i | ignoreCase | Huruf sepadan tanpa mengira huruf besar atau kecil. |
m | multiline | ^ dan $ sepadan pada awal dan akhir setiap baris. |
s | dotAll | . juga sepadan dengan pemisah baris. |
u | unicode | Anggap corak sebagai titik kod; membolehkan \p{…} dan \u{…}. |
y | sticky | Hanya padan pada kedudukan lastIndex semasa. |
d | hasIndices | Laporkan kedudukan mula dan akhir bagi setiap kumpulan tangkapan. |
Perlindungan catastrophic backtracking
Corak dengan kuantifier bersarang, seperti (a+)+$ atau (\w|\d)*x, boleh mengambil masa eksponen pada input yang hampir sepadan. Dalam halaman web biasa, ini membekukan tab. Di sini setiap padanan berjalan dalam Web Worker latar belakang yang dihentikan selepas satu saat, dan anda mendapat amaran yang jelas dan bukannya pelayar yang tergantung. Corak yang sama dalam kod produksi boleh menjadi kelemahan ReDoS, jadi anggap amaran itu sebagai pepijat yang perlu dibaiki.
Petua menulis regex yang lebih baik
- Labuhkan corak dengan
^ dan $ semasa mengesahkan keseluruhan nilai, jika tidak padanan di mana-mana dalam rentetan akan lulus.
- Utamakan kelas khusus seperti
[^"]* berbanding .*; ia lebih pantas dan mengelakkan padanan berlebihan.
- Guna kumpulan bukan tangkapan
(?:…) apabila anda tidak memerlukan nilai yang ditangkap.
- Namakan kumpulan anda.
match.groups.year lebih mudah dibaca daripada match[1].
Soalan lazim
Varian regex manakah yang digunakan oleh penguji ini?
JavaScript (ECMAScript), melalui RegExp terbina dalam pelayar anda. Kebanyakan sintaks dikongsi dengan PCRE, Python dan Java, tetapi ciri seperti kuantifier posesif, kumpulan atomik dan pengubah sebaris seperti (?i) tidak tersedia dalam JavaScript.
Mengapa corak saya hanya menemui satu padanan?
Tanpa bendera g (global), JavaScript berhenti selepas padanan pertama. Hidupkan g untuk mencari setiap kemunculan.
Bagaimana untuk merujuk kumpulan dalam penggantian?
Guna $1, $2… untuk kumpulan bernombor, $<name> untuk kumpulan bernama, $& untuk seluruh padanan dan $$ untuk tanda dolar literal.
Mengapa penguji berhenti kerana tamat masa?
Corak itu mengambil masa lebih daripada satu saat pada input anda, yang hampir selalu bermaksud catastrophic backtracking. Cari kuantifier bersarang seperti (x+)+ atau alternatif bertindih seperti (a|a)* dan tulis semula supaya setiap aksara hanya boleh dipadankan dengan satu cara.
Adakah data ujian saya dihantar ke mana-mana?
Tidak. Pemadanan berjalan secara setempat dalam Web Worker di dalam pelayar anda. Corak dan teks anda hanya disimpan dalam pelayar anda sendiri supaya ia masih ada apabila anda kembali.