Ako používať RegExp na potvrdenie ukončenia reťazca v JavaScripte

Používanie konštruktora Regexp? ️

Tento článok je založený na skriptovaní základného algoritmu freeCodeCamp „Potvrďte koniec“.

Táto výzva spočíva v kontrole, či reťazec končí konkrétnou postupnosťou písmen alebo nie.

V tomto článku vysvetlím, ako to vyriešiťvýzva pomocou RegExp.

Zaujímavým aspektom tohto riešenia je použitie konštruktora RegExp na vytvorenie konkrétneho RegExp, ktorý musíte skontrolovať ako reťazce odovzdané ako argumenty.

Algoritmická výzva

Skontrolujte, či reťazec (prvý argument str) končí daným cieľovým reťazcom (druhý argument target). .endsWith()Túto výzvu je možné vyriešiť metódou zavedenou v ES2015. Ale na účely tejto výzvy by sme chceli, aby ste namiesto toho použili niektorú z metód podreťazenia JavaScriptu.

Poskytnuté testovacie prípady

confirmEnding("Bastian", "n")by sa mala vrátiť pravda. confirmEnding("Congratulation", "on")by sa mala vrátiť pravda. confirmEnding("Connor", "n")by sa mal vrátiť false. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")by sa mal vrátiť false. confirmEnding("He has to give me a new name", "name")by sa mala vrátiť pravda. confirmEnding("Open sesame", "same")by sa mala vrátiť pravda. confirmEnding("Open sesame", "pen")by sa mal vrátiť false. confirmEnding("Open sesame", "game")by sa mal vrátiť false. confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")by sa mal vrátiť false. confirmEnding("Abstraction", "action")by sa malo vrátiť pravdivé. .endsWith()Na vyriešenie výzvy nepoužívajte vstavanú metódu .

1. Prvý nápad, ktorý vôbec nefunguje

Ak ste rovnako ako ja milovníkmi RexExp, vaším prvým pokusom môže byť pokúsiť sa vyriešiť problém pomocou nižšie uvedeného kódu , a nebude to fungovať .

Dôvodom je to, že s touto syntaxou bude funkcia test () hľadať konkrétny reťazec „target“ a nie „target“ ako premennú odovzdanú ako argument.

Ak sa vrátime k našim testovacím prípadom, tie, ktoré by sa mali vrátiť „nepravdivé“, vyhovujú, ale žiadny z tých, ktoré by mali vrátiť „pravdivý“, nevyhovuje, čo je celkom predvídateľné.

2. Vyriešte výzvu vytvorením konkrétneho RegExp, ktorý potrebujete, pomocou konštruktora RegExp

Aby ste mohli použiť RegExp, ktorý bude „rozumieť“, že argument „target“ je premenná a nie reťazec „target“, musíte vytvoriť šitý na mieru RegExp pomocou konštruktora RegExp .

A skôr ako sa posunieme vpred, vráťme sa na chvíľu späť a pozrime sa, čo chceme otestovať: argument „target“ by mal byť koncom argumentu „str“. To znamená, že náš RegExp by mal končiť znakom „$“ .

Teraz môžeme túto výzvu vyriešiť v troch krokoch

Krok 1 - Vytvorte premennú pridaním znaku „$“ na koniec argumentu „target“, v tomto prípade pomocou metódy concat ().

Krok 2 - Pomocou konštruktora RegExp a operátora „new“ vytvorte správny RexExp s vyššie uvedenou premennou.

Krok 3 - Vráťte výsledok funkcie test ().

A toto krásne vyhovuje všetkým prípadovým testom?

Toto je možné refaktorovať do dvoch podobných riadkov

Poznámka : Pretože žiadny z testovacích prípadov neznamená testovanie veľkých písmen, nie je potrebné používať príznak „i“.

Užitočné odkazy

String.prototype.concat () v MDN

RegExp.prototype.test () v MDN

Konštruktor RegExp v MDN

Regulárne výrazy vo freeCodeCamp

Ďalšie riešenia tejto výzvy

Výzva "Získať Tip" navrhuje riešenia pomocou metódy slice () .

Môžete nájsť dva ďalšie spôsoby riešenia tejto výzvy, jeden s metódou substr () a druhý s metódou endsWith (), ktoré v tomto článku vysvetlila Sonya Moisset .

Toto ad hoc riešenie RegExp vám tiež môže pomôcť vyriešiť problém skriptovania freeCodeCamp s prechodným algoritmom „Vyhľadať a nahradiť“ .

Ďakujem za čítanie!

Ak sa vám tento článok páčil, prosím, tlieskajte rukami toľkokrát, koľkokrát sa vám páči, a zdieľajte ho, aby ste ho našli iným ľuďom. To im možno urobí deň.

Ak máte reakciu / otázku / návrh , nezabudnite zanechať komentár nižšie . Budem rád, keď si od vás prečítam!

Môžete ma tiež kontaktovať alebo sledovať na Twitteri .