Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've built a JavaScript function returning the index of the nth occurrence of a substring in a string.

$(document).ready(function() {

        var containingString = '.this.that.';
        subString = '.';

        var index = GetIndexOfSubstring(containingString, subString, 2);


    function GetIndexOfSubstring(containingString, subString, occurrenceNumberOfSubString) 
        tokens = containingString.split(subString);
        var numberOfSubStrings = tokens.length - 1;

        if (occurrenceNumberOfSubString > numberOfSubStrings)
            return "Error";

        var index = 0 + occurrenceNumberOfSubString - 1;

        for(var c = 0; c < occurrenceNumberOfSubString; c++)
            var i = containingString.indexOf(subString);
            var sub = containingString.substr(i + 1);
            containingString = sub;
            index += i;

        return index;

As far as I can see, the function works correctly. Is there is an easier way to accomplish the goal? Also, can the function be improved?

share|improve this question
Using a custom build RegExp should be faster and a lot less code. – Ivo Wetzel Mar 23 '12 at 18:29

There's no need to split the original string or slice away at the string, you can just use the built in indexOf, keeping track of how many times you've looked for the substring. As a personal preference, I'd also use smaller, not as bombastic, variables names.

Also, there's absolutely no need to include jQuery in this - the $(document).ready is redundant.

function GetSubstringIndex(str, substring, n) {
    var times = 0, index = null;

    while (times < n && index !== -1) {
        index = str.indexOf(substring, index+1);

    return index;
share|improve this answer
You should account for the length of substring: index = str.indexOf(substring, index+substring.length); – dbenham Nov 5 '14 at 17:12

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.