Maison > interface Web > js tutoriel > Une alternative aux expressions régulières: APG-Exp

Une alternative aux expressions régulières: APG-Exp

William Shakespeare
Libérer: 2025-02-17 11:25:18
original
1035 Les gens l'ont consulté

An Alternative to Regular Expressions: apg-exp

Cet article a été évalué par des pairs par Sebastian Seitz et Almir Bijedic. Merci à tous les pairs examinateurs de SitePoint pour avoir obtenu le contenu de SitePoint à son meilleur!

Presque tous les programmeurs doivent utiliser des expressions régulières sous une certaine forme de temps à autre. Pour beaucoup, la grammaire de motifs peut sembler mystérieuse et intimidante. Ce tutoriel introduira un nouveau motif de motif APG-Exp, une alternative riche en fonctionnalités à RegExP, qui utilise la syntaxe du modèle ABNF et est plus facile à lire.

Points clés

  • APG-Exp fournit une alternative conviviale aux expressions régulières, en utilisant la syntaxe ABNF, qui est plus facile à lire et à comprendre pour les utilisateurs qui ne connaissent pas le modèle regexp traditionnel.
  • APG-Exp est très simple à installer et à utiliser, et prend en charge l'environnement Node.js et les options de téléchargement direct GitHub, ce qui lui permet d'accéder à divers paramètres de projet.
  • La syntaxe ABNF utilisée par APG-EXP divise les modèles complexes en composants plus simples et plus lisibles, ce qui est plus intuitif que les expressions régulières habituellement mystérieuses.
  • APG-EXP prend en charge les fonctionnalités de correspondance de motifs avancées qui ne sont pas disponibles dans RegExP en JavaScript, telles que la récursivité, qui est essentielle à la correspondance de modèles imbriqués.
  • Cette bibliothèque fournit des outils détaillés de gestion des erreurs et de débogage pour aider les développeurs à identifier et à résoudre efficacement les problèmes dans la logique de correspondance des modèles.
  • Malgré ses capacités puissantes, APG-Exp maintient toujours une API simple, ce qui facilite l'intégration et l'utilisation sans avoir besoin de nombreuses modifications des bases de code existantes.

Comparaison rapide

Avez-vous déjà eu besoin de vérifier votre adresse e-mail et de rencontrer quelque chose comme ça?

<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Copier après la connexion
Copier après la connexion

Le moteur de correspondance de motif est le bon outil pour ce travail. Il s'agit d'une expression régulière bien conçue et bien écrite. Cela fonctionne bien. Alors qu'est-ce que tu n'aimes pas d'autre?

Eh bien, si vous êtes un expert en expressions régulières, il n'y a rien. Mais pour le reste d'entre nous, ils pourraient être

  • Difficile à lire
  • Il est plus difficile d'écrire
  • difficile à maintenir

La grammaire d'expression régulière a une histoire longue et longue et a été profondément intégrée dans de nombreux outils et langages que nous utilisons en tant que programmeurs chaque jour.

Cependant, il existe une syntaxe alternative qui existe depuis presque le même temps, qui est très populaire parmi les écrivains et les consommateurs de spécifications techniques sur Internet, avec toutes les fonctions d'expressions régulières, mais est rarement dans l'utilisation du monde de la programmation JavaScript . C'est-à-dire le paradigme BACOS-NOR amélioré (ABNF), officiellement défini par l'IETF dans RFC 5234 et RFC 7405.

Voyons à quoi ressemble la même adresse e-mail dans ABNF.

<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>
Copier après la connexion
Copier après la connexion

Bien sûr, ce n'est pas compact, mais comme HTML et XML, il est conçu pour être lu par les humains et les machines. Je suppose que, juste un peu de compréhension des modèles de recherche générique, vous pouvez presque lire ce qui se passe ici dans "Simple English".

  • L'adresse e-mail est définie comme des pièces et des domaines locaux séparés par @
  • La partie locale est un mot suivi par un mot séparé en option
  • Les domaines
  • sont un ou plusieurs sous-domaines séparés par DOT suivis d'un seul domaine de niveau supérieur
  • La seule chose que vous ne savez peut-être pas ici, mais ce que vous avez peut-être deviné est:
    • Tout comme le caractère générique signifie "zéro ou plus", 1 signifie "un ou plusieurs", tandis que 2 * 6 signifie minimum 2 fois et maximum 6 répétitions
    • / Alternatives séparées
    • % D définit le code de caractère décimal et la plage de codes de caractères
    • Par exemple, �5 signifie #, ASCII décimal 35
    • �5-90 signifie tout caractère dans la gamme A-Z, décimal ASCII 65-90

Cette adresse e-mail pour Regexp et APG-Exp est comparée dans l'exemple 1.

APG-Exp est un moteur de correspondance de motif conçu pour avoir l'apparence de regexp, mais utilise la syntaxe ABNF pour la définition du modèle. Dans les prochaines sections, je vous guiderai à travers:

  • Comment intégrer APG-Exp dans votre application
  • Un bref guide de la syntaxe ABNF
  • Utilisez APG-Exp - certains exemples
  • où aller ensuite - plus de détails, des exemples avancés

Téléchargez et run-comment pour l'obtenir

npm

Si vous travaillez dans un environnement Node.js, exécutez à partir de votre répertoire de projet:

<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Copier après la connexion
Copier après la connexion

Vous pouvez ensuite y accéder dans votre code en utilisant require ().

Exemple:

<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>
Copier après la connexion
Copier après la connexion

github

Pour obtenir une copie du code de GitHub, vous pouvez cloner le référentiel à votre répertoire de projet:

<code>npm install apg-exp --save</code>
Copier après la connexion

ou téléchargez-le en tant que fichier zip.

puis dans page.html:

<code>var ApgExp = require("apg-exp");
var exp = new ApgExp(pattern, flags);
var result = exp.exec(stringToMatch);</code>
Copier après la connexion

cdn

Vous pouvez également utiliser RawGit pour créer des versions CDN directement à partir du code source GitHub. Cependant, assurez-vous de ne lire pas de disponibilité ou de garantie de support (assurez-vous en fait de lire toute la FAQ).

Tous les exemples de ce tutoriel utilisent ce qui suit.

<code>git clone https://github.com/ldthomas/apg-js2-exp.git apg-exp</code>
Copier après la connexion

Ces fichiers sont mis en cache sur le serveur MAXCDN et vous pouvez les utiliser pour tester tant qu'ils sont disponibles. Cependant, pour les environnements de production, vous devez placer des copies d'APGEXP-Min.js et APGEXP.CSS sur votre propre serveur pour assurer l'accès et les inclure dans votre page en fonction de la meilleure façon pour votre application.

(Le contenu suivant a été tronqué en raison de la durée de l'article. Veuillez fournir la partie suivante pour le traitement continu)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal