Skip to content

Home

Find all indexes of a substring in a JavaScript string

Finding the index of a substring in a string can be easily accomplished using String.prototype.indexOf(). However, if you want to check for all occurrences of a substring, there's no built-in method to do so. Yet, it's fairly easy to do so yourself.

In order to find all indexes of a substring, I find it useful to create a generator function. This provides a little more flexibility and might be more efficient in some cases.

As mentioned already, String.prototype.indexOf() only returns the first occurrence of a substring, but it can be passed a second argument, fromIndex, which specifies the index at which to start the search. Combining this with a while loop, we can find occurrences of a substring in a string as long as there are any (the method returns -1 when no occurrence is found).

As long as an occurrence is found, we can use yield to return the index and update the fromIndex to continue the search. If no occurrence is found, we can use return to terminate the generator.

const indexOfSubstrings = function* (str, searchValue) {
  let i = 0;
  while (true) {
    const r = str.indexOf(searchValue, i);
    if (r !== -1) {
      yield r;
      i = r + 1;
    } else return;
  }
};

[...indexOfSubstrings('tiktok tok tok tik tok tik', 'tik')]; // [0, 15, 23]
[...indexOfSubstrings('tutut tut tut', 'tut')]; // [0, 2, 6, 10]
[...indexOfSubstrings('hello', 'hi')]; // []

More like this

Start typing a keyphrase to see matching snippets.