What is the difference between indexOf() and search()?

What is the difference between indexOf() and search()?

Being fairly new to JavaScript, I’m unable to discern when to use each of these.
Can anyone help clarify this for me?


Solution 1:

If you require a regular expression, use search(). Otherwise, indexOf() is going to be faster.

Solution 2:

indexOf is for plain substrings, search is for regular expressions.

Solution 3:

The search function (one description here) takes a regular expression, which allows you to match against more sophisticated patters, case-insensitive strings, etc., while indexOf (one description here) simply matches a literal string. However, indexOf also allows you to specify a beginning index.

Solution 4:

I think the main difference is that search accept regular expressions.

Check this reference:

Solution 5:

IndexOf() – it accepts string literals or string objects but not regular expressions. It also accepts a zero-based integer value to start its search from, e.g.:

  1. “babyelephant”.indexOf(“e”); // gives you 4
  2. “babyelephant”.indexOf(“e”,5); // gives you 6 as the search
    starts from 6th position or 5th index.
  3. var m= /e/; “babyelephant”.indexOf(m); //gives -1 as it doesnt
    accepts regular expressions.
Related:  JavaScript: Can ECMAScript 5's Strict Mode (“use strict”) be enabled using single quotes ('use strict')?

Search() – accepts both string literals or string objects and regular expressions. But it doesn’t accepts a index to start the search from.

Solution 6:

indexOf() and search()

  • common in both

    i) return the first occurrence of searched value

    ii) return -1 if no match found

    let str='Book is booked for delivery'
    str.indexOf('b')   // returns position 8
    str.search('b')    // returns position 8 

  • special in indexOf()

    i) you can give starting search position as a second argument

    str.indexOf('k')   // 3
    str.indexOf('k',4) // 11 (it start search from 4th position) 

  • special in search()

search value can be regular expression

str.search('book') // 8
str.search(/book/i)  // 0   ( /i =case-insensitive   (Book == book)