Rumah > hujung hadapan web > tutorial js > Alternatif kepada ungkapan biasa: APG-Exp

Alternatif kepada ungkapan biasa: APG-Exp

William Shakespeare
Lepaskan: 2025-02-17 11:25:18
asal
1034 orang telah melayarinya

An Alternative to Regular Expressions: apg-exp

Artikel ini telah dikaji semula oleh Sebastian Seitz dan Almir Bijedic. Terima kasih kepada semua pengulas rakan sebaya di SitePoint untuk mendapatkan kandungan SitePoint untuk yang terbaik!

Hampir setiap pengaturcara perlu menggunakan ungkapan biasa dalam beberapa bentuk dari semasa ke semasa. Bagi ramai, tatabahasa corak mungkin kelihatan misteri dan menakutkan. Tutorial ini akan memperkenalkan corak baru yang sepadan dengan enjin APG-Exp-alternatif yang kaya dengan ciri untuk RegEXP, yang menggunakan sintaks corak ABNF dan lebih mudah dibaca.

mata utama

    APG-Exp menyediakan alternatif yang mesra pengguna kepada ekspresi biasa, menggunakan sintaks ABNF, yang lebih mudah dibaca dan difahami untuk pengguna yang tidak biasa dengan corak regexp tradisional.
  • APG-EXP sangat mudah dipasang dan digunakan, dan menyokong persekitaran Node.js dan pilihan muat turun langsung GitHub, yang membolehkannya mengakses pelbagai tetapan projek.
  • sintaks ABNF yang digunakan oleh APG-ExP memecahkan corak kompleks ke dalam komponen yang lebih mudah, lebih mudah dibaca, yang lebih intuitif daripada ungkapan biasa yang biasanya misteri.
  • APG-EXP menyokong ciri-ciri pencocokan corak canggih yang tidak terdapat dalam REGEXP dalam JavaScript, seperti rekursi, yang penting untuk memadankan corak bersarang.
  • Perpustakaan ini menyediakan alat pengendalian dan debug ralat terperinci untuk membantu pemaju mengenal pasti dan menyelesaikan masalah dalam logik yang sepadan dengan corak.
  • Walaupun keupayaannya yang kuat, APG-EXP masih mengekalkan API yang mudah, menjadikannya mudah untuk diintegrasikan dan digunakan tanpa memerlukan banyak pengubahsuaian kepada pangkalan kod sedia ada.

Perbandingan cepat

Pernahkah anda perlu mengesahkan alamat e -mel anda dan menemui sesuatu seperti ini?

<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Salin selepas log masuk
Salin selepas log masuk
Enjin pencocokan corak adalah alat yang tepat untuk pekerjaan ini. Ini adalah ungkapan biasa yang direka dengan baik dan ditulis dengan baik. Ia berfungsi dengan baik. Jadi apa lagi yang anda tidak suka?

Nah, jika anda pakar dalam ungkapan biasa, tidak ada apa -apa. Tetapi bagi kita yang lain, mereka mungkin

    sukar dibaca
  • lebih sukar untuk menulis
  • sukar untuk mengekalkan
Tatabahasa ekspresi biasa mempunyai sejarah yang panjang dan panjang dan telah terintegrasi ke dalam banyak alat dan bahasa yang kita gunakan sebagai pengaturcara setiap hari.

Walau bagaimanapun, terdapat sintaks alternatif yang telah hampir sama pada masa yang sama, yang sangat popular di kalangan penulis dan pengguna spesifikasi teknikal internet, dengan semua fungsi ekspresi biasa, tetapi jarang dalam penggunaan pengaturcaraan JavaScript dunia . Iaitu, paradigma bacos-nor (ABNF) yang dipertingkatkan, secara rasmi ditakrifkan oleh IETF dalam RFC 5234 dan RFC 7405.

mari kita lihat apa alamat e -mel yang sama seperti di ABNF.

Sudah tentu, ia tidak padat, tetapi seperti HTML dan XML, ia direka untuk dibaca oleh manusia dan mesin. Saya rasa, hanya sedikit pemahaman tentang corak carian wildcard, anda hampir boleh membaca apa yang berlaku di sini dalam "Bahasa Inggeris Mudah".
<code>email-address   = local "@" domain
local           = local-word *("." local-word)
domain          = 1*(sub-domain ".") top-domain
local-word      = 1*local-char
sub-domain      = 1*sub-domain-char
top-domain      = 2*6top-domain-char
local-char      = alpha / num / special
sub-domain-char = alpha / num / "-"
top-domain-char = alpha
alpha           = %d65-90 / %d97-122
num             = %d48-57
special         = %d33 / %d35 / %d36-39 / %d42-43 / %d45 / %d47 
                / %d61 / %d63 / %d94-96 / %d123-126</code>
Salin selepas log masuk
Salin selepas log masuk
  • Alamat e -mel ditakrifkan sebagai bahagian dan domain tempatan yang dipisahkan oleh @
  • Bahagian tempatan adalah perkataan yang diikuti oleh perkataan yang dipisahkan dot pilihan
  • domain adalah satu atau lebih subdomain yang dipisahkan dot diikuti oleh domain peringkat atas tunggal
  • satu -satunya perkara yang anda tidak tahu di sini, tetapi apa yang mungkin anda fikirkan ialah:
    • Sama seperti watak Wildcard bermaksud "sifar atau lebih", 1 bermaksud "satu atau lebih", manakala 2*6 bermaksud minimum 2 kali dan maksimum 6 pengulangan
    • / Alternatif berasingan
    • %d mentakrifkan kod aksara perpuluhan dan pelbagai kod aksara
    • Sebagai contoh, �5 bermaksud #, Ascii Decimal 35
    • �5-90 bermaksud mana-mana watak dalam julat A-Z, ASCII perpuluhan 65-90

Alamat e-mel ini untuk regexp dan APG-Exp dibandingkan dengan Contoh 1.

APG-Exp adalah enjin pencocokan corak yang direka untuk melihat dan merasakan regexp, tetapi menggunakan sintaks ABNF untuk definisi corak. Dalam beberapa bahagian yang akan datang, saya akan membimbing anda melalui:

  • bagaimana untuk mengintegrasikan APG-Exp ke dalam aplikasi anda
  • panduan ringkas untuk sintaks ABNF
  • Gunakan contoh APG-EXP-sesetengah
  • ke mana hendak pergi - maklumat lanjut, contoh lanjutan

muat naik dan run-how untuk mendapatkannya

npm

Jika anda bekerja di persekitaran Node.js, lari dari direktori projek anda:

anda kemudian boleh mengaksesnya dalam kod anda menggunakan keperluan ().
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Salin selepas log masuk
Salin selepas log masuk

Contoh:

GitHub
<code>email-address   = local "@" domain
local           = local-word *("." local-word)
domain          = 1*(sub-domain ".") top-domain
local-word      = 1*local-char
sub-domain      = 1*sub-domain-char
top-domain      = 2*6top-domain-char
local-char      = alpha / num / special
sub-domain-char = alpha / num / "-"
top-domain-char = alpha
alpha           = %d65-90 / %d97-122
num             = %d48-57
special         = %d33 / %d35 / %d36-39 / %d42-43 / %d45 / %d47 
                / %d61 / %d63 / %d94-96 / %d123-126</code>
Salin selepas log masuk
Salin selepas log masuk
Untuk mendapatkan salinan kod dari GitHub, anda boleh mengklon repositori ke direktori projek anda:

atau muat turunnya sebagai fail zip.

<code>npm install apg-exp --save</code>
Salin selepas log masuk
kemudian di page.html:

cdn

<code>var ApgExp = require("apg-exp");
var exp = new ApgExp(pattern, flags);
var result = exp.exec(stringToMatch);</code>
Salin selepas log masuk
Anda juga boleh menggunakan Rawgit untuk membuat versi CDN secara langsung dari kod sumber GitHub. Walau bagaimanapun, pastikan anda tidak membaca masa uptime atau jaminan sokongan (sebenarnya pastikan anda membaca keseluruhan FAQ).

Semua contoh dalam tutorial ini Gunakan yang berikut.

Fail -fail ini di -cache pada pelayan MaxCDN dan anda boleh menggunakannya untuk menguji selagi ia tersedia. Walau bagaimanapun, untuk persekitaran pengeluaran, anda harus meletakkan salinan APGEXP-MIN.JS dan APGEXP.CSS pada pelayan anda sendiri untuk memastikan akses dan masukkannya di halaman anda mengikut cara terbaik untuk permohonan anda.

<code>git clone https://github.com/ldthomas/apg-js2-exp.git apg-exp</code>
Salin selepas log masuk

(Kandungan berikut telah dipotong kerana panjang artikel. Sila berikan bahagian berikutnya untuk pemprosesan berterusan)

Atas ialah kandungan terperinci Alternatif kepada ungkapan biasa: APG-Exp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan