JavaScript: compruebe si la cadena contiene una subcadena

    Una operaci贸n com煤n en muchos lenguajes de programaci贸n es verificar si una cadena contiene otra cadena. Si bien es una tarea simple y com煤n, los nombres de los m茅todos a menudo difieren entre los lenguajes de programaci贸n. Por ejemplo, aqu铆 hay una peque帽a muestra de los m茅todos utilizados para lograr esto en varios idiomas:

    • Java: String.contains(), String.indexOf()etc.
    • Python: in operador, String.index(), String.find()
    • Vamos: strings.Contains()
    • Rub铆: string.include?

    T煤 entiendes. Hay un mill贸n de formas de hacer esto, y parece que cada idioma lo implementa de manera diferente.

    De todos modos, veamos algunas de las formas en que puede verificar si la cadena contiene una subcadena en JavaScript.

    Nota: Los dos primeros m茅todos que se muestran a continuaci贸n tambi茅n funcionan en matrices, lo que le indica si una matriz contiene un valor dado (o el 铆ndice de la misma para indexOf()). Tenga esto en cuenta cuando lea el art铆culo, ya que probablemente le ayudar谩 en casos de uso similares.

    los String.includes() M茅todo

    Este m茅todo se introdujo en ES6 y suele ser el m茅todo preferido para casos de uso sencillos. Si todo lo que necesita hacer es obtener un valor booleano que indique si la subcadena est谩 en otra cadena, entonces esto es lo que querr谩 usar.

    Funciona as铆:

    > let str="Pharos.sh";
    > let substr="stack";
    > str.includes(substr);
    true
    

    Como puede ver, se devuelve un valor booleano ya que la cadena “pila” es una subcadena de “Pharos.sh”.

    Esta es una b煤squeda sensible a may煤sculas y min煤sculas, por lo que lo siguiente no coincidir谩 con la subcadena:

    > let str="Pharos.sh";
    > let substr="stack";
    > str.includes(substr);
    false
    

    Si bien esto es suficiente para la mayor铆a de los casos de uso, el includes() El m茅todo tambi茅n proporciona otra opci贸n que puede resultarle 煤til. Se puede proporcionar un segundo argumento que le dice al m茅todo en qu茅 铆ndice comenzar la b煤squeda. Entonces, si sabe que la subcadena no est谩 contenida en los primeros 50 caracteres (o simplemente no quiere que coincida con esos caracteres), entonces puede usar el m茅todo de esta manera:

    str.includes(substr, 50);
    

    Un desplazamiento por debajo de 0 simplemente inicia la b煤squeda desde el 铆ndice 0, y un desplazamiento mayor que string.length devoluciones false ya que la b煤squeda comienza desde string.length.

    los String.indexOf() M茅todo

    los String.indexOf() El m茅todo es muy parecido al anterior includes() m茅todo (y es adecuado para ser utilizado en un polyfill para includes() tambi茅n), pero la 煤nica diferencia es el valor de retorno. En lugar de devolver un valor booleano que indica la presencia de la subcadena, en realidad devuelve la ubicaci贸n del 铆ndice de la subcadena, o -1 si no est谩 presente.

    He aqu铆 un ejemplo:

    > let str="Pharos.sh";
    > let substr="abuse";
    > str.indexOf(substr);
    5
    > str.indexOf('apple');
    -1
    

    Como puede ver, este m茅todo devuelve la posici贸n de 铆ndice basada en 0 de la subcadena y un -1 cuando no se encontr贸 la subcadena.

    Como el includes() m茅todo, el indexOf() El m茅todo distingue entre may煤sculas y min煤sculas y tambi茅n admite el par谩metro de compensaci贸n:

    > let str="Pharos.sh";
    > let substr="abuse";
    > str.indexOf(substr);
    -1
    > str.indexOf('Abu', 3);
    5
    > str.indexOf('Abu', 6);
    -1
    

    Este m茅todo es 煤til para cuando necesita saber la ubicaci贸n exacta de la subcadena, sin embargo, no es tan limpio cuando simplemente lo usa como booleano:

    let str="Pharos.sh";
    let substr="stack";
    
    if (str.indexOf(substr) > -1) {
        console.log('Found the substring!');
    }
    

    En casos como este deber铆as usar el includes() en su lugar, ya que es m谩s propenso a errores.

    Regex

    Una de las formas m谩s 煤tiles y poderosas de verificar una subcadena es usar expresiones regulares o regex. El uso de expresiones regulares para una tarea como esta le brinda mucha m谩s flexibilidad que con los m茅todos anteriores, donde solo puede verificar una cadena constante. Si bien la expresi贸n regular es un tema demasiado grande para cubrirlo completamente aqu铆, al menos podemos echar un vistazo a algunas de las caracter铆sticas 煤tiles para nuestro caso de uso.

    La verificaci贸n de subcadenas en una cadena con expresiones regulares se puede lograr usando el RegExp.test() m茅todo:

    > let str="Pharos.sh";
    > /stack/.test(str);
    true
    

    A diferencia de los dos m茅todos anteriores, ahora podemos realizar b煤squedas que no distinguen entre may煤sculas y min煤sculas con la i bandera:

    > let str="Pharos.sh";
    > /stack/i.test(str);
    true
    

    Como ejemplo m谩s complejo, digamos que quiere ver si una cadena contiene un c贸digo postal (c贸digos postales de 5 d铆gitos), pero realmente no le importa qu茅 c贸digo postal hay en la cadena. Este tipo de problema no se puede resolver usando includes() o indexOf(). Pero con expresiones regulares, podemos probar esto f谩cilmente:

    > let str="My zip code is 90210";
    > /d{5}/.test(str);
    true
    > str="My address is 123 Fake St.";
    > /d{5}/.test(str);
    false
    

    Si bien JavaScript no es necesariamente conocido por su velocidad de todos modos, tenga en cuenta que esto ser谩 m谩s lento que un m茅todo m谩s simple como includes(), por lo que solo debe usarlo para los casos m谩s complejos que no se pueden resolver con una soluci贸n m谩s simple.

    Conclusi贸n

    Manipular e inspeccionar cadenas es una de las tareas m谩s comunes realizadas en muchos lenguajes de programaci贸n, especialmente con c贸digo de cara al usuario. Por muchas razones diferentes, como validar cadenas, deber谩 verificar si una cadena contiene una subcadena. En este art铆culo, vimos algunos m茅todos diferentes proporcionados por JavaScript que le permiten hacer exactamente eso.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *