Sådan bruges en RegExp til at bekræfte afslutningen på en streng i JavaScript

Brug af Regexp? ️ konstruktøren

Denne artikel er baseret på freeCodeCamp's Basic Algorithm Scripting “Bekræft afslutningen”.

Denne udfordring indebærer at kontrollere, om en streng slutter med en bestemt bogstavsekvens eller ej.

I denne artikel forklarer jeg, hvordan man løser detteudfordring ved hjælp af en RegExp.

Det interessante aspekt af denne løsning er at bruge RegExp-konstruktøren til at oprette den specifikke RegExp, du har brug for for at kontrollere Strings sendt som argumenter.

Algoritmeudfordring

Kontroller, om en streng (første argument, str) slutter med den givne målstreng (andet argument, target). Denne udfordring kan løses med .endsWith()metoden, der blev introduceret i ES2015. Men med henblik på denne udfordring vil vi gerne have, at du bruger en af ​​JavaScript-substreringsmetoderne i stedet.

Medfølgende testtilfælde

confirmEnding("Bastian", "n")skal vende tilbage sandt. confirmEnding("Congratulation", "on")skal vende tilbage sandt. confirmEnding("Connor", "n")skal returnere falsk. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")skal returnere falsk. confirmEnding("He has to give me a new name", "name")skal vende tilbage sandt. confirmEnding("Open sesame", "same")skal vende tilbage sandt. confirmEnding("Open sesame", "pen")skal returnere falsk. confirmEnding("Open sesame", "game")skal returnere falsk. confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")skal returnere falsk. confirmEnding("Abstraction", "action")skal returnere sandt. Brug ikke den indbyggede metode .endsWith()til at løse udfordringen.

1. Den første idé, der slet ikke fungerer

Hvis du ligesom mig er en RexExp-elsker, kan dit første forsøg være at prøve at løse udfordringen med koden nedenfor , og det fungerer ikke .

Årsagen er, at med denne syntaks vil test () -funktionen søge efter det specifikke "mål" -streng og ikke "mål" som en variabel, der sendes som et argument.

Hvis vi går tilbage til vores testsager, bestå de, der skal returnere "falske", men ingen af ​​dem, der skal returnere "sande", hvilket er ret forudsigeligt.

2. Løs udfordringen ved at oprette den specifikke RegExp, du har brug for, med RegExp-konstruktøren

For at kunne bruge et RegExp, der vil "forstå", at "target" -argumentet er en variabel og ikke String "-målet", skal du oprette en taylorfremstillet RegExp ved hjælp af RegExp-konstruktøren .

Og inden vi bevæger os fremad, lad os gå tilbage et øjeblik og se på, hvad vi vil teste: "mål" -argumentet skal være slutningen på "str" ​​-argumentet. Dette betyder, at vores RegExp skal slutte med “$” -tegnet .

Nu kan vi løse denne udfordring i tre trin

Trin 1 - Opret en variabel, der tilføjer "$" i slutningen af ​​"target" -argumentet ved hjælp af concat () -metoden i dette tilfælde.

Trin 2 - Brug RegExp-konstruktøren og den "nye" operator til at oprette den rigtige RexExp med ovenstående variabel.

Trin 3 - Returner resultatet af funktionen test ().

Og dette består alle sagsprøver smukt?

Dette kan omformuleres i to linjer som denne

Bemærk : Da ingen af ​​testsagerne indebærer at teste bogstaverne med store bogstaver, er der ingen grund til at bruge “i” -flagget.

Nyttige links

String.prototype.concat () i MDN

RegExp.prototype.test () i MDN

RegExp-konstruktør i MDN

Regulære udtryk i freeCodeCamp

Andre løsninger på denne udfordring

Den udfordring ”Få en Hint” antyder en løsning ved hjælp af skive () metode .

Du kan finde to andre måder at løse denne udfordring på, den ene med metoden substr () og den anden med metoden enderWith (), forklaret af Sonya Moisset i denne artikel .

Denne ad-hoc RegExp-løsning kan også hjælpe dig med at løse freeCodeCamp Intermediate Algorithm Scripting "Søg og erstat" udfordring .

Tak fordi du læste!

Hvis du kunne lide denne artikel, bedes du “hænde-klappe” så mange gange du vil og dele den for at hjælpe andre mennesker med at finde den. Det kan gøre deres dag.

Hvis du har en reaktion / spørgsmål / forslag , skal du sørge for at efterlade en kommentar nedenfor . Jeg bliver glad for at læse fra dig!

Du kan også kontakte og / eller følge mig på Twitter .