Apakah alat ini?
Ungkapan biasa (regex) ialah bahasa corak padat untuk mencari, mengesahkan dan mengekstrak teks: corak e-mel boleh mengesahkan input borang, \d{4}-\d{2}-\d{2} mencari tarikh, dan kumpulan tangkapan menarik keluar bahagian yang anda perlukan. Hampir setiap bahasa pengaturcaraan dan editor menyokong regex.
Penguji ini menggunakan enjin regex JavaScript — enjin yang sama berjalan dalam Node.js dan setiap pelayar — jadi corak yang anda bina di sini berkelakuan sama dalam kod JavaScript/TypeScript anda. Kebanyakan corak juga berfungsi tanpa perubahan dalam Python, Java dan Go.
Kenapa guna alat ini?
- Maklum balas langsung: padanan diserlahkan kuning semasa anda menaip corak.
- Kumpulan tangkapan dipaparkan bagi setiap padanan — lihat dengan tepat apa yang akan dikandungi $1 dan $2.
- Sokongan bendera penuh: g (semua padanan), i (abaikan huruf besar/kecil), m (berbilang baris), s (titik padan baris baharu), u (unicode).
- Mesej ralat yang jelas apabila corak mempunyai kesilapan sintaks.
- Percuma dan peribadi — corak dan teks tidak pernah meninggalkan pelayar anda.
Cara menggunakannya
- Taip corak anda antara dua aksara / (tiada keperluan untuk melepaskan garis condong sendiri).
- Laraskan bendera dalam kotak kecil selepas / kedua — g lalai mencari semua padanan.
- Tampal teks ujian anda di bawah.
- Padanan diserlahkan serta-merta; kumpulan tangkapan disenaraikan di bawah.
- Jika corak tidak sah, mesej ralat menerangkan apa yang salah.
Contoh
Input
Corak: (\w+)@(\w+)\.com
Teks ujian: Contact alice@example.com or bob@test.comHasil
✓ 2 padanan
#1 kumpulan: $1=alice $2=example
#2 kumpulan: $1=bob $2=testKurungan mencipta kumpulan tangkapan yang boleh anda rujuk sebagai $1 dan $2 dalam penggantian.
Tip praktikal
- Mengesahkan input e-mel? ^[^\s@]+@[^\s@]+\.[^\s@]+$ ialah corak longgar yang menangkap kesilapan taip yang jelas tanpa menolak alamat yang sah tetapi tidak lazim — pematuhan RFC 5322 penuh memerlukan pustaka, bukan satu baris.
- Mengekstrak parameter pertanyaan daripada URL: [?&]([^=]+)=([^&]*) dengan bendera g, kemudian baca $1/$2 setiap padanan berbanding memisahkan secara manual pada & dan =.
- Akan menggunakan corak dalam .replace()? Uji di sini dahulu — apa yang diserlahkan adalah tepat apa yang akan disentuh oleh .replace(), termasuk kumpulan tangkapan.
- Menghurai log berbilang baris (memadankan cap masa pada permulaan setiap baris)? Tambah bendera m supaya ^ dan $ berlabuh setiap baris berbanding keseluruhan rentetan.
- Menyalin corak daripada Python atau PHP dan ia tidak padan di sini? Semak untuk kumpulan bernama (?P<name>...) — JavaScript guna (?<name>...), tiada P — atau kuantifier posesif (++, *+), yang tidak wujud dalam regex JavaScript.
Penguji regex JavaScript, bukan yang generik
Alat ini menjalankan enjin RegExp terbina dalam JavaScript — laluan kod tepat di sebalik str.match(pattern) atau pattern.test(str) dalam konsol pelayar atau Node.js. Ini berbeza daripada menguji terhadap PCRE (yang digunakan PHP, dan yang dilalaikan oleh banyak penguji regex "universal") atau modul re Python: JavaScript tidak mempunyai kuantifier posesif atau kumpulan atomik, dan kumpulan tangkapan bernama guna (?<name>...) berbanding (?P<name>...) PCRE/Python.
Jika anda akan menghantar corak dalam JS atau TypeScript — pengesahan borang, pemadan laluan, penghurai log — mengujinya di sini bermakna sifar percanggahan perisa: apa yang diserlahkan pada halaman ini adalah tepat apa yang dipadankan oleh new RegExp(pattern, flags) semasa masa jalan.
Di mana ini sesuai dalam aliran kerja sebenar
Ujian regex jarang berdiri sendiri. Urutan biasa: sahkan corak di sini, jalankan .replace() sebenar dalam kod anda, kemudian bandingkan teks sebelum/selepas untuk memastikan penggantian melakukan apa yang anda jangkakan dan tiada yang lain.
Mengekstrak data berstruktur dengan kumpulan tangkapan sering terus menyalur ke JSON — format output yang diekstrak untuk menyemak ia dihurai seperti yang anda jangkakan.
Soalan lazim
Perisa regex manakah yang digunakan oleh penguji ini?
JavaScript (ECMAScript), enjin dalam setiap pelayar dan Node.js. Sintaks teras boleh dipindah, tetapi sesetengah ciri berbeza antara bahasa — cth. sokongan lookbehind dan sintaks kumpulan bernama berbeza dalam Python dan Java.
Mengapa corak saya hanya mencari padanan pertama?
Bendera g (global) hilang. Tanpa g, regex berhenti selepas padanan pertama. Alat ini lalai kepada g — semak sama ada anda telah membuangnya secara tidak sengaja.
Mengapa . tidak memadankan pemisah baris saya?
Secara lalai . memadankan sebarang aksara kecuali baris baharu. Tambah bendera s (dotall) supaya . turut memadankan baris baharu, atau guna [\s\S] sebagai alternatif mudah alih.
Apakah maksud keputusan kumpulan tangkapan?
Setiap pasangan kurungan dalam corak anda menangkap teks yang dipadankan. $1 ialah kumpulan pertama, $2 kedua, dan seterusnya — inilah yang anda rujuk dalam operasi penggantian dan kod pengekstrakan.
Mengapa regex saya perlahan atau membeku?
Kemungkinan besar backtracking bencana, disebabkan oleh kuantifier bersarang seperti (a+)+ pada input yang tidak padan. Tulis semula corak untuk mengelakkan pengulangan yang samar-samar. Alat ini mengehadkan sehingga 1000 padanan untuk kekal responsif.