Penguji Regex untuk JavaScript

Taip ungkapan nalar dan lihat setiap padanan diserlahkan semasa anda menaip, dengan kumpulan tangkapan, pratonton penggantian dan pustaka corak siap guna.

Berjalan dalam pelayar andaTanpa pendaftaranTiada apa dimuat naik

Padanan diserlahkan

    
Guna $1, $<name>, $& (seluruh padanan)
Butiran padanan
#IndeksPadananKumpulan
Helaian rujukan regex
.Sebarang aksara kecuali baris baharu (sebarang dengan s)
\d \w \sDigit, aksara perkataan, ruang putih
\D \W \SBukan digit, bukan perkataan, bukan ruang putih
[abc] [^abc]Salah satu / bukan a, b, c
[a-z0-9]Julat aksara
\p{L} \p{N}Huruf / nombor Unicode (perlu u)
^ $Awal / akhir input (baris dengan m)
\b \BSempadan perkataan / bukan sempadan
* + ?0 atau lebih, 1 atau lebih, 0 atau 1
{n} {n,} {n,m}Tepat n, sekurang-kurangnya n, antara n dan m
*? +? ??Malas (sesedikit mungkin)
a|ba atau b
(…)Kumpulan tangkapan, dirujuk sebagai $1
(?<name>…)Kumpulan bernama, $<name>
(?:…)Kumpulan bukan tangkapan
\1 \k<name>Rujukan balik
(?=…) (?!…)Lookahead / lookahead negatif
(?<=…) (?<!…)Lookbehind / lookbehind negatif
\. \* \\Aksara literal yang di-escape
\n \t \rBaris baharu, tab, carriage return
\uFFFFUnit kod Unicode
\u{1F600}Titik kod (perlu u)
$&Seluruh padanan dalam penggantian
$` $'Teks sebelum / selepas padanan

Cara menggunakan Penguji Regex

  1. Masukkan corak anda di antara garis miring, tanpa / di sekelilingnya.
  2. Togol bendera seperti g (semua padanan), i (abaikan huruf besar/kecil) dan m (berbilang baris).
  3. Tampal teks ujian anda. Padanan diserlahkan di sebelah kanan dan disenaraikan bersama indeks dan kumpulan tangkapan di bawah.
  4. Tandakan Ganti dan masukkan penggantian seperti $1 atau $<name> untuk pratonton String.replace.
  5. 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

BenderaNamaKesan
gglobalCari setiap padanan dan bukannya berhenti pada yang pertama.
iignoreCaseHuruf sepadan tanpa mengira huruf besar atau kecil.
mmultiline^ dan $ sepadan pada awal dan akhir setiap baris.
sdotAll. juga sepadan dengan pemisah baris.
uunicodeAnggap corak sebagai titik kod; membolehkan \p{…} dan \u{…}.
ystickyHanya padan pada kedudukan lastIndex semasa.
dhasIndicesLaporkan 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.

Alat berkaitan