«¿Esta cadena contiene esa palabra?» — la pregunta que atormenta a todo principiante
\nEstás escribiendo un script, recibes una respuesta del servidor o simplemente filtras una lista de ciudades. Y de repente te quedas atascado: ¿cómo verificar si una cadena contiene una subcadena específica en JavaScript? Esta pregunta es un verdadero éxito en Stack Overflow, la hacen miles de desarrolladores. Y con razón: las cadenas son la base de cualquier aplicación, y saber buscar subcadenas en ellas rápidamente es una habilidad básica.
\nEn este tutorial, analizaremos tres formas prácticas: desde la más moderna (y la favorita de todos) hasta la clásica con ventajas adicionales. Aprenderás cuándo usar cada método y escribirás código del que no te avergüences en una entrevista.
\n\nMétodo n.º 1: includes() — simplicidad y elegancia
\nSi escribes código en JavaScript moderno (ES6 y superior), entonces includes() es tu mejor amigo. Este método devuelve true o false y se lee como una pregunta común en inglés: «¿La cadena incluye la subcadena?».
Sintaxis
\nstring.includes(searchString, position)\n- \n
searchString— lo que buscamos (obligatorio). \n position— parámetro opcional, desde qué índice comenzar la búsqueda (por defecto 0). \n
Ejemplo en acción
\nconst message = "¡Hola, mundo! JavaScript es genial.";\n\nconsole.log(message.includes("JavaScript")); // true\nconsole.log(message.includes("Python")); // false\nconsole.log(message.includes("mundo", 10)); // false (búsqueda desde el carácter 10)\n\nTen en cuenta: el método distingue entre mayúsculas y minúsculas. "javascript" y "JavaScript" son cadenas diferentes. Si necesitas ignorar mayúsculas/minúsculas, simplemente convierte ambas cadenas a minúsculas:
const text = "Aprendiendo JavaScript";\nconst keyword = "javascript";\n\nconsole.log(text.toLowerCase().includes(keyword.toLowerCase())); // true\n\n\nCuándo usarlo
\n- \n
- Validación de formularios (verificar si un email contiene "@"). \n
- Búsqueda en listas (filtrado de productos). \n
- Cualquier verificación simple de inclusión. \n
Método n.º 2: indexOf() — el clásico que nunca muere
\nAntes de que apareciera includes(), todos usaban indexOf(). No solo dice «sí/no», sino que devuelve el índice de la primera aparición de la subcadena. Si no se encuentra la subcadena, devuelve -1.
Sintaxis
\nstring.indexOf(searchValue, fromIndex)\n\nEjemplo
\nconst sentence = "Me encanta JavaScript y Python.";\n\nconsole.log(sentence.indexOf("encanta")); // 3\nconsole.log(sentence.indexOf("Ruby")); // -1\n\n// Verificación de inclusión\nif (sentence.indexOf("JavaScript") !== -1) {\n console.log("¡Sí, la cadena contiene JavaScript!");\n}\n\n\nDetalle importante: ¿por qué no !== -1?
\nMuchos principiantes escriben if (str.indexOf("word")) — y eso es un error. Si la subcadena está al principio (índice 0), la condición if (0) se evalúa como false. Siempre compara con -1.
Cuándo usar indexOf() en lugar de includes()
\n- \n
- Cuando necesitas el índice de inicio de la subcadena (por ejemplo, para extraer parte de la cadena). \n
- Trabajar con código antiguo (IE y versiones antiguas de navegadores). \n
- Cuando necesitas encontrar todas las apariciones (en un bucle cambiando
fromIndex). \n
Método n.º 3: search() y RegExp — cuando necesitas flexibilidad
\n¿Y si necesitas encontrar no solo una palabra, sino un patrón? Por ejemplo, «todas las palabras que comienzan con "JS"» o «un número de teléfono en formato +7-xxx-xxx-xx-xx». Aquí es donde entran en juego las expresiones regulares y el método search().
Sintaxis
\nstring.search(regexp)\n
Blogs
Book Recommendations
Leer también
Rust vs Python para backend: comparación práctica y ejemplos de código
MatFormFieldControl: analizando el error de una vez por todas
Los 10 mejores frameworks de Go para desarrollo web en 2025
Expresiones regulares en Rust: guía completa con ejemplos
Errores y excepciones en Python: Guía avanzada y completa