Comment utiliser un RegExp pour confirmer la fin d'une chaîne en JavaScript

Utilisation du constructeur Regexp? ️

Cet article est basé sur le script d'algorithme de base de freeCodeCamp «Confirmer la fin».

Ce défi consiste à vérifier si une chaîne se termine par une séquence spécifique de lettres ou non.

Dans cet article, je vais vous expliquer comment résoudre ce problèmedéfi en utilisant un RegExp.

L'aspect intéressant de cette solution est l'utilisation du constructeur RegExp pour créer le RegExp spécifique dont vous avez besoin pour vérifier les chaînes passées en tant qu'arguments.

Défi algorithme

Vérifiez si une chaîne (premier argument, str) se termine par la chaîne cible donnée (deuxième argument, target). Ce défi peut être résolu avec la .endsWith()méthode, qui a été introduite dans ES2015. Mais dans le cadre de ce défi, nous aimerions que vous utilisiez à la place l'une des méthodes de sous-chaîne JavaScript.

Cas de test fournis

confirmEnding("Bastian", "n")devrait retourner vrai. confirmEnding("Congratulation", "on")devrait retourner vrai. confirmEnding("Connor", "n")devrait retourner false. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")devrait retourner false. confirmEnding("He has to give me a new name", "name")devrait retourner vrai. confirmEnding("Open sesame", "same")devrait retourner vrai. confirmEnding("Open sesame", "pen")devrait retourner false. confirmEnding("Open sesame", "game")devrait retourner false. confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")devrait retourner false. confirmEnding("Abstraction", "action")doit retourner true.N'utilisez pas la méthode intégrée .endsWith()pour résoudre le problème.

1. La première idée qui ne fonctionne pas du tout

Si, comme moi, vous êtes un amoureux de RexExp, votre première tentative pourrait être d'essayer de résoudre le défi avec le code ci - dessous , et cela ne fonctionnera pas .

La raison en est que, avec cette syntaxe, la fonction test () recherchera la chaîne spécifique «cible» et non «cible» en tant que variable passée en argument.

Si nous revenons à nos cas de test, ceux qui devraient retourner «false» réussissent, mais aucun de ceux qui devraient retourner «true» ne réussit, ce qui est tout à fait prévisible.

2. Résolvez le défi en créant le RegExp spécifique dont vous avez besoin avec le constructeur RegExp

Afin d'utiliser un RegExp qui va «comprendre» que l'argument «cible» est une variable et non la chaîne «cible», vous devez créer un RegExp sur mesure en utilisant le constructeur RegExp .

Et, avant d'avancer, revenons en arrière une minute et regardons ce que nous voulons tester: l'argument «cible» devrait être la fin de l'argument «str». Cela signifie que notre RegExp doit se terminer par le caractère «$» .

Maintenant, nous pouvons résoudre ce défi en trois étapes

Étape 1 - Créez une variable en ajoutant le «$» à la fin de l'argument «target», en utilisant la méthode concat () dans ce cas.

Étape 2 - Utilisez le constructeur RegExp et l'opérateur «new» pour créer le bon RexExp avec la variable ci-dessus.

Étape 3 - Renvoyez le résultat de la fonction test ().

Et cela passe magnifiquement tous les tests de cas?

Cela peut être refactorisé en deux lignes comme celle-ci

Remarque : aucun des cas de test n'impliquant de tester la capitalisation des lettres, il n'est pas nécessaire d'utiliser le drapeau «i».

Liens utiles

String.prototype.concat () dans MDN

RegExp.prototype.test () dans MDN

Constructeur RegExp dans MDN

Expressions régulières dans freeCodeCamp

D'autres solutions à ce défi

Le défi «Get a Hint» suggère une solution utilisant la méthode slice () .

Vous pouvez trouver deux autres moyens de résoudre ce problème, l'un avec la méthode substr () et l'autre avec la méthode endsWith (), expliqués par Sonya Moisset dans cet article .

Cette solution RegExp ad hoc peut également vous aider à résoudre le défi «Rechercher et remplacer» de script d'algorithme intermédiaire freeCodeCamp .

Merci pour la lecture!

Si vous avez apprécié cet article, veuillez «applaudir» autant de fois que vous le souhaitez et partagez-le pour aider d'autres personnes à le trouver. Cela peut faire leur journée.

Si vous avez une réaction / question / suggestion , assurez-vous de laisser un commentaire ci-dessous . Je serai heureux de vous lire!

Vous pouvez également me contacter et / ou me suivre sur Twitter .