Kako koristiti RegExp za potvrdu završetka niza u JavaScript-u

Korištenje Regexp? ️ konstruktora

Ovaj se članak temelji na skripti "Osnovni algoritam" FreeCodeCampa "Potvrdite kraj".

Ovaj izazov uključuje provjeru završava li niz određenim slijedom slova ili ne.

U ovom ću članku objasniti kako to riješitiizazov koristeći RegExp.

Zanimljiv aspekt ovog rješenja je korištenje RegExp konstruktora za stvaranje određenog RegExp-a koji trebate provjeriti nizove prosljeđene kao argumente.

Izazov algoritma

Provjerite strzavršava li niz (prvi argument, ) zadanim ciljnim nizom (drugi argument, target). Ovaj se izazov može riješiti .endsWith()metodom koja je uvedena u ES2015. Ali u svrhu ovog izazova željeli bismo da umjesto toga koristite jednu od metoda podnizanja JavaScript.

Dati test slučajevi

confirmEnding("Bastian", "n")treba vratiti istina. confirmEnding("Congratulation", "on")treba vratiti istina. confirmEnding("Connor", "n")treba vratiti false. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")treba vratiti false. confirmEnding("He has to give me a new name", "name")treba vratiti istina. confirmEnding("Open sesame", "same")treba vratiti istina. confirmEnding("Open sesame", "pen")treba vratiti false. confirmEnding("Open sesame", "game")treba vratiti false. confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")treba vratiti false. confirmEnding("Abstraction", "action")treba vratiti true.Ne koristite ugrađenu metodu .endsWith()za rješavanje izazova.

1. Prva ideja koja uopće ne djeluje

Ako ste poput mene ljubitelj RexExp-a, vaš bi prvi pokušaj mogao biti pokušaj rješavanja izazova pomoću donjeg koda i neće uspjeti .

Razlog je što će s ovom sintaksom funkcija test () tražiti određeni "target" string, a ne "target" kao varijablu koja se prosljeđuje kao argument.

Ako se vratimo na testne slučajeve, oni koji bi trebali vratiti "lažno", doduše, ali nijedan od onih koji bi trebao vratiti "istinito" nije prošao, što je sasvim predvidljivo.

2. Riješite izazov stvaranjem određenog RegExp-a koji vam treba s RegExp konstruktorom

Da biste koristili RegExp koji će "razumjeti" da je argument "target" varijabla, a ne String "target", morate stvoriti RegExp po mjeri pomoću RegExp konstruktora .

I, prije nego što krenemo naprijed, vratimo se na minutu i pogledajmo što želimo testirati: argument "target" trebao bi biti kraj argumenta "str". To znači da bi naš RegExp trebao završiti znakom "$" .

Sada taj izazov možemo riješiti u tri koraka

Korak 1 - Stvorite varijablu dodajući "$" na kraju argumenta "target", koristeći u ovom slučaju metodu concat ().

Korak 2 - Upotrijebite RegExp konstruktor i operator „new“ da biste stvorili pravi RexExp s gornjom varijablom.

Korak 3 - vratite rezultat funkcije test ().

I ovo lijepo prolazi sve testove slučaja?

To se može refaktorirati u dva ovakva retka

Napomena : budući da niti jedan test slučaj ne podrazumijeva testiranje velikih i malih slova, nema potrebe za upotrebom zastavice „i“.

Korisni linkovi

String.prototype.concat () u MDN-u

RegExp.prototype.test () u MDN-u

Konstruktor RegExp u MDN-u

Regularni izrazi u freeCodeCamp

Druga rješenja za ovaj izazov

Izazov „Dobiti savjet” predlaže rješenje pomoću kriška () metodu .

Možete pronaći dva druga načina rješavanja ovog izazova, jedan metodom substr (), a drugi metodom endWith (), objasnila je Sonya Moisset u ovom članku .

Ovo ad-hoc rješenje RegExp također vam može pomoći u rješavanju izazova skriptiranje intercerijskog algoritma freeCodeCamp "Traži i zamijeni" .

Hvala na čitanju!

Ako vam se svidio ovaj članak, molimo vas da "pljesnete rukama" koliko god puta želite i podijelite ga kako biste ga pomogli drugim ljudima pronaći. To će im možda uljepšati dan.

Ako imate reakciju / pitanje / prijedlog , svakako ostavite komentar ispod . Bit će mi drago čitati od vas!

Također me možete kontaktirati i / ili slijediti na Twitteru .