Как да използваме RegExp, за да потвърдим края на низ в JavaScript

Използване на конструктора Regexp? ️

Тази статия се основава на основния алгоритъм на скрипта на freeCodeCamp „Потвърдете края“.

Това предизвикателство включва проверка дали даден низ завършва с определена последователност от букви или не.

В тази статия ще ви обясня как да разрешите товапредизвикателство с помощта на RegExp.

Интересният аспект на това решение е използването на конструктора RegExp за създаване на конкретния RegExp, който трябва да проверите Strings, предадени като аргументи.

Предизвикателство на алгоритъма

Проверете дали низ (първи аргумент, str) завършва с дадения целеви низ (втори аргумент, target). Това предизвикателство може да бъде решено с .endsWith()метода, въведен в ES2015. Но за целта на това предизвикателство бихме искали вместо това да използвате един от методите на поднизовете на JavaScript.

Предоставени тестови случаи

confirmEnding("Bastian", "n")трябва да се върне вярно. confirmEnding("Congratulation", "on")трябва да се върне вярно. confirmEnding("Connor", "n")трябва да върне false. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")трябва да върне false. confirmEnding("He has to give me a new name", "name")трябва да се върне вярно. confirmEnding("Open sesame", "same")трябва да се върне вярно. confirmEnding("Open sesame", "pen")трябва да върне false. confirmEnding("Open sesame", "game")трябва да върне false. confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")трябва да върне false. confirmEnding("Abstraction", "action")трябва да върне true. Не използвайте вградения метод .endsWith()за решаване на предизвикателството.

1. Първата идея, която изобщо не работи

Ако като мен сте любител на RexExp, първият ви опит може да бъде да опитате да разрешите предизвикателството с кода по-долу и той няма да работи .

Причината е, че с този синтаксис функцията test () ще търси конкретния низ „target“, а не „target“ като променлива, предадена като аргумент.

Ако се върнем към нашите тестови случаи, тези, които трябва да върнат „false“, наистина преминават, но никой от тези, които трябва да върнат „true“, не е съвсем предсказуем.

2. Решете предизвикателството, като създадете конкретния RegExp, от който се нуждаете, с конструктора RegExp

За да използвате RegExp, който ще „разбере“, че аргументът „target“ е променлива, а не „target“ на String, трябва да създадете специално направен RegExp с помощта на RegExp конструктора .

И преди да продължим напред, нека се върнем за минута назад и да погледнем какво искаме да тестваме: аргументът „target“ трябва да бъде краят на аргумента „str“. Това означава, че нашият RegExp трябва да завършва със знака „$“ .

Сега можем да разрешим това предизвикателство в три стъпки

Стъпка 1 - Създайте променлива, като добавите „$“ в края на аргумента „target“, като в този случай използвате метода concat ().

Стъпка 2 - Използвайте конструктора RegExp и оператора “new”, за да създадете правилния RexExp с горната променлива.

Стъпка 3 - Върнете резултата от функцията test ().

И това прекрасно преминава всички тестове по случая?

Това може да бъде рефакторирано в два реда като този

Забележка : тъй като нито един от тестовите случаи не предполага тестване на главни букви, няма нужда да използвате флага „i“.

Полезни връзки

String.prototype.concat () в MDN

RegExp.prototype.test () в MDN

Конструктор RegExp в MDN

Регулярни изрази в freeCodeCamp

Други решения на това предизвикателство

В предизвикателството "Вземете Съвет" предлага решение с помощта на метода парче () .

Можете да намерите два други начина за решаване на това предизвикателство, единият с метода substr (), а другият с метода endWith (), обяснен от Sonya Moisset в тази статия .

Това ad-hoc решение за RegExp може също да ви помогне да решите предизвикателството за скриптове за междинен алгоритъм freeCodeCamp „Търсене и замяна“ .

Благодаря ви, че прочетохте!

Ако харесате тази статия, моля „пляскайте с ръце“ колкото пъти искате и я споделете, за да помогнете на други хора да я намерят. Това може да им направи деня.

Ако имате реакция / въпрос / предложение , не забравяйте да оставите коментар по-долу . Ще се радвам да прочета от вас!

Можете също така да се свържете и / или да ме следвате в Twitter .