Cómo usar una expresión regular para confirmar el final de una cadena en JavaScript

Usando el constructor Regexp? ️

Este artículo se basa en el script de algoritmo básico de freeCodeCamp "Confirmar el final".

Este desafío implica verificar si una cadena termina con una secuencia específica de letras o no.

En este artículo, explicaré cómo resolver esto.desafío usando una expresión regular.

El aspecto interesante de esta solución es usar el constructor RegExp para crear la RegExp específica que necesita para verificar las cadenas pasadas como argumentos.

Desafío del algoritmo

Verifique si una cadena (primer argumento str) termina con la cadena de destino dada (segundo argumento target). Este desafío se puede resolver con el .endsWith()método, que se introdujo en ES2015. Pero para el propósito de este desafío, nos gustaría que utilizara uno de los métodos de subcadena de JavaScript en su lugar.

Casos de prueba proporcionados

confirmEnding("Bastian", "n")debería devolver verdadero. confirmEnding("Congratulation", "on")debería devolver verdadero. confirmEnding("Connor", "n")debe devolver falso. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")debe devolver falso. confirmEnding("He has to give me a new name", "name")debería devolver verdadero. confirmEnding("Open sesame", "same")debería devolver verdadero. confirmEnding("Open sesame", "pen")debe devolver falso. confirmEnding("Open sesame", "game")debe devolver falso. confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")debe devolver falso. confirmEnding("Abstraction", "action")debe devolver verdadero No utilice el método incorporado .endsWith()para resolver el desafío.

1. La primera idea que no funciona en absoluto

Si, como yo, eres un amante de RexExp, tu primer intento podría ser intentar resolver el desafío con el siguiente código , y no funcionará .

La razón es que, con esta sintaxis, la función test () buscará la Cadena "objetivo" específica y no "objetivo" como una variable pasada como argumento.

Si volvemos a nuestros casos de prueba, los que deberían devolver "falso", pasan, pero ninguno de los que deberían devolver "verdadero" pasa, lo cual es bastante predecible.

2. Resuelva el desafío creando la expresión regular específica que necesita con el constructor de expresiones regulares

Para usar una RegExp que va a "entender" que el argumento "objetivo" es una variable y no la cadena "objetivo", debe crear una RegExp hecha a medida utilizando el constructor RegExp .

Y, antes de seguir adelante, retrocedamos un minuto y veamos lo que queremos probar: el argumento "objetivo" debe ser el final del argumento "str". Esto significa que nuestra expresión regular debe terminar con el carácter "$" .

Ahora, podemos resolver este desafío en tres pasos.

Paso 1 : cree una variable agregando el "$" al final del argumento "objetivo", usando el método concat () en este caso.

Paso 2 : use el constructor RegExp y el operador "nuevo" para crear el RexExp correcto con la variable anterior.

Paso 3 : devuelve el resultado de la función test ().

¿Y esto pasa todas las pruebas de casos maravillosamente?

Esto se puede refactorizar en dos líneas como esta

Nota : dado que ninguno de los casos de prueba implica probar el uso de mayúsculas en las letras, no es necesario utilizar la marca "i".

Enlaces útiles

String.prototype.concat () en MDN

RegExp.prototype.test () en MDN

Constructor de expresiones regulares en MDN

Expresiones regulares en freeCodeCamp

Otras soluciones a este desafío

El desafío "Get a Hint" sugiere una solución usando el método slice () .

Puede encontrar otras dos formas de resolver este desafío, una con el método substr () y la otra con el método endsWith (), explicada por Sonya Moisset en este artículo .

Esta solución de RegExp ad-hoc también puede ayudarlo a resolver el desafío de "Buscar y reemplazar" de la secuencia de comandos del algoritmo intermedio freeCodeCamp .

¡Gracias por leer!

Si te ha gustado este artículo, "aplaude" tantas veces como quieras y compártelo para ayudar a otras personas a encontrarlo. Eso puede alegrarles el día.

Si tiene una reacción / pregunta / sugerencia , asegúrese de dejar un comentario a continuación . ¡Estaré encantado de leer de ti!

También puedes ponerte en contacto y / o seguirme en Twitter .