Penguji Regex
Uji ekspresi reguler JavaScript secara langsung. Lihat kecocokan disorot dan grup tangkapan terdaftar.
Kecocokan yang disorot
Kecocokan & grup
- Ketik pola regex Anda ke dalam bidang di atas (tidak perlu membungkusnya dalam garis miring).
- Aktifkan flag yang Anda inginkan: g untuk semua kecocokan, i untuk tidak peka huruf besar-kecil, dll.
- Tempel atau ketik string uji ke kotak String uji.
- Lihat kecocokan disorot secara real-time; periksa grup yang ditangkap dalam tabel di bawah.
Apa fungsinya?
Penguji ini menjalankan pola Anda terhadap string uji menggunakan mesin RegExp native browser — sama seperti yang digunakan Node.js, Deno, dan setiap browser. Kecocokan disorot secara inline. Grup tangkapan bernomor dan bernama diekstrak ke dalam tabel sehingga Anda dapat melihat persis apa yang ditangkap setiap segmen dalam tanda kurung.
Contoh
Pola (dengan flag g):
\b(\w+)@(\w+\.\w+)\b String uji:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). Kecocokan:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar tidak cocok karena \w+\.\w+ memerlukan titik di domain.
Mengapa regex saya tidak cocok?
- Lupa flag g. Tanpa itu, hanya kecocokan pertama yang dikembalikan. /cat/.exec("cat cat") menemukan satu "cat"; /cat/g menemukan keduanya.
- Metakarakter yang tidak di-escape. example.com juga cocok dengan examplexcom karena . cocok dengan karakter apa pun. Escape: example\.com.
- Pencocokan greedy mengonsumsi berlebihan. <.*> pada <a><b> menangkap seluruhnya. Gunakan lazy <.*?> atau <[^>]*> untuk berhenti pada > pertama.
- Kebingungan batas kata. \b adalah posisi antara karakter kata dan karakter non-kata. Pola seperti \bfoo-bar\b gagal karena - sudah merupakan batas non-kata di tengah.
- Huruf besar-kecil tidak cocok. [a-z]+ tidak akan cocok dengan Hello. Tambahkan flag i atau sertakan [A-Za-z]+.
- Multiline ^ / $. Tanpa flag m mereka hanya menambatkan ke seluruh string, bukan setiap baris. Aktifkan m jika Anda memindai baris log.
Pertanyaan yang sering diajukan
Jenis regex mana yang digunakan penguji ini?
Regex JavaScript (ECMAScript), melalui mesin RegExp bawaan browser. Itu berbeda dari PCRE (PHP, Perl), modul re Python, dan regex POSIX dalam beberapa cara: tidak ada rekursi, tidak ada quantifier posesif, grup bernama menggunakan (?<name>...) alih-alih (?P<name>...), dan shorthand kelas karakter seperti \d hanya ASCII kecuali Anda menambahkan flag u.
Apakah mendukung lookbehind?
Ya. Pernyataan lookbehind seperti (?<=foo)bar dan (?<!foo)bar ditambahkan di ES2018 dan didukung di semua build Chromium, Firefox, dan Safari saat ini. Jika Anda menargetkan browser yang sangat lama di produksi, periksa caniuse sebelum mengandalkannya — tetapi penguji ini sendiri menjalankannya dengan baik.
Apa arti flag g, i, m, s, dan u?
g menemukan setiap kecocokan alih-alih hanya yang pertama. i membuat pencocokan tidak peka huruf besar-kecil. m membuat ^ dan $ cocok dengan awal dan akhir setiap baris alih-alih seluruh string. s (dotall) membuat . cocok dengan newlines. u mengaktifkan penanganan Unicode lengkap dan penguraian escape yang lebih ketat. Pilih hanya flag yang Anda butuhkan — terutama g mengubah berapa banyak kecocokan yang Anda dapatkan.
Mengapa quantifier greedy saya mencocokkan terlalu banyak?
Quantifier seperti *, +, dan {n,} greedy secara default — mereka cocok sebanyak mungkin dan hanya mundur jika pola lainnya gagal. Tambahkan ? untuk membuatnya lazy: .*? cocok sesedikit mungkin. Perbaikan umum untuk <a>.*</a> yang memakan beberapa tag: gunakan <a>.*?</a> atau kelas negasi <a>[^<]*</a>.
Bagaimana saya mereferensikan grup yang ditangkap nanti dalam pola atau pengganti?
Di dalam pola, gunakan \1, \2, dll. untuk mencocokkan teks yang sama dengan yang ditangkap grup sebelumnya — (\w+)\s+\1 mencocokkan kata berulang. Dalam string pengganti (tidak didukung di penguji langsung ini, tetapi di String.replace) gunakan $1, $2. Grup bernama menggunakan \k<name> di dalam pola dan $<name> di pengganti.
Mengapa regex saya rusak ketika pola berisi titik, garis miring, atau tanda kurung?
Itu adalah metakarakter regex. Untuk mencocokkannya secara harfiah, escape dengan backslash: \. untuk titik, \/ untuk garis miring (opsional dalam string new RegExp, diperlukan antara literal /.../), \( dan \) untuk tanda kurung. Karakter khususnya adalah . * + ? ^ $ { } ( ) | [ ] \ — setiap dari ini sebagai teks harfiah memerlukan escaping.
Apakah Anda menyimpan regex atau teks uji yang saya ketik di sini?
Tidak. Kami tidak menyimpan pola yang Anda tulis atau teks yang Anda uji terhadapnya. Semua yang Anda ketik dibuang pada saat Anda menutup atau me-refresh tab — tidak ada log, tidak ada catatan di pihak kami tentang apa yang Anda cocokkan. Jika Anda ingin kepastian ekstra, alat pengembang browser Anda akan mengonfirmasinya.