Compruebe si una cadena contiene una subcadena usando indexOf() en JavaScript

Para verificar si una cadena contiene una subcadena en JavaScript:

  1. Llamar al String.indexOf() en la cadena dada, pasándola a la subcadena como parámetro.
  2. Compare el valor devuelto con -1 .
  3. Si el valor devuelto no es igual a -1 , la cadena contiene la subcadena.
const str = 'React is a popular JavaScript library.'
const substr = 'JavaScript'

const index = str.indexOf(substr)
console.log(index) // 19

if (str.indexOf(substr) !== -1) {
  console.log(`String contains "${substr}"`)
} else {
  console.log(`String does not contain "${substr}"`)
}
// String contains "JavaScript"

El String.indexOf(searchValue[, fromIndex]) El método toma dos parámetros:

  1. searchValue — Una cadena que representa el valor a buscar dentro de esta cadena. Si no se especifica explícitamente ninguna cadena, searchValue por defecto será undefined y este valor se buscará en la cadena actual.
  2. fromIndex — Un entero opcional que representa el índice desde el que comenzar la búsqueda. El valor predeterminado es 0 .

El String.indexOf() método devuelve el índice de la primera aparición de searchValue en la cadena, o -1 si no se encuentra. Si se pasa una cadena vacía como searchValue , coincidirá con cualquier índice entre 0 y str.length .

Pongamos otro ejemplo:

const str = 'React is a popular JavaScript library.'

str.indexOf('React') // 0
str.indexOf('Preact') // -1
str.indexOf('React', 5) // -1
str.indexOf('') // 0
str.indexOf('', 5) // 5

El String.indexOf() El método distingue entre mayúsculas y minúsculas, lo que significa que las siguientes expresiones se evalúan como -1 :

'JavaScript'.indexOf('script')    // -1
'JavaScript'.indexOf('SCRIPT')    // -1

Si hay más de una subcadena coincidente, String.indexOf() devolverá la primera posición de la primera aparición:

'Java, Java, Java!'.indexOf('Java')   // 0

El valor 0 , devuelto por el String.indexOf() , el método no se evalúa como true . Lo mismo ocurre con -1 , que no se evalúa como false tampoco.

Entonces, si deja el operador igual para verificar explícitamente la presencia de la cadena, es posible que vea resultados incorrectos.

Aquí hay un ejemplo interesante:

const str = 'Apple is the manufacturer of iPhone X.'

if(str.indexOf('Apple')) {
    console.log('Awesome!')
}

if(str.indexOf('Samsung')) {
    console.log('Good!')
}

En el código anterior, el primer if la condición nunca se ejecutará aunque la palabra Apple existe en la cadena. Del mismo modo, el segundo if la condición se evaluará como true aunque la cadena no contiene la palabra Samsung .

Por esta razón, al verificar si una cadena contiene otra subcadena, la forma correcta de verificar sería:

if (str.indexOf('Apple') !== -1) {
    console.log('Awesome!')
}

if (str.indexOf('Samsung') !== -1) {
    console.log('Good!')
}

Lea este artículo para conocer otras funciones de JavaScript que se pueden usar para verificar la presencia de una subcadena en una cadena.