Check if a string contains a substring using indexOf() in JavaScript

To check if a string contains a substring in JavaScript:

  1. Call the String.indexOf() method on the given string, passing it to the substring as a parameter.
  2. Compare the returned value to -1.
  3. If the returned value is not equal to -1, the string contains the substring.
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"

The String.indexOf(searchValue[, fromIndex]) method takes two parameters:

  1. searchValue — A string representing the value to search for within this string. If no string is explicitly specified, searchValue will default to undefined and this value will be searched in the current string.
  2. fromIndex — An optional integer that represents the index to start the search from. The default value is 0.

The String.indexOf() method returns the index of the first occurrence of searchValue in the string, or -1 if not found. If an empty string is passed as searchValue, it will match at any index between 0 and str.length.

Note: In JavaScript, the first character in a string has an index of 0, and the index of the last character is str.length - 1.

Let us have another example:

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

The String.indexOf() method is case-sensitive, which means the following expressions evaluate to -1:

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

If more than one matched substrings are present, String.indexOf() will return the first position of the first occurrence:

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

The value 0, returned by the String.indexOf(), method does not evaluate to true. The same is the case with -1, which does not evaluate to false either.

So if you leave the equal operator to explicitly verify the presence of the string, you might see incorrect results.

Here is an interesting example:

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

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

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

In the above code, the first if condition will never execute even though the word Apple does exist in the string. Similarly, the second if condition will evaluate to true although the string does not contain the word Samsung.

For this reason, when checking if a string contains another substring, the correct way to check would be:

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

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

Read this article to learn about other JavaScript functions that can be used to check the presence of a substring in a string.

✌️ Like this article? Follow me on Twitter and LinkedIn. You can also subscribe to RSS Feed.

You might also like...

Digital Ocean

The simplest cloud platform for developers & teams. Start with a $200 free credit.

Buy me a coffee ☕

If you enjoy reading my articles and want to help me out paying bills, please consider buying me a coffee ($5) or two ($10). I will be highly grateful to you ✌️

Enter the number of coffees below:

✨ Learn to build modern web applications using JavaScript and Spring Boot

I started this blog as a place to share everything I have learned in the last decade. I write about modern JavaScript, Node.js, Spring Boot, core Java, RESTful APIs, and all things web development.

The newsletter is sent every week and includes early access to clear, concise, and easy-to-follow tutorials, and other stuff I think you'd enjoy! No spam ever, unsubscribe at any time.