This string function is an extension of String.indexOf() and will return all indexes of a search string. It's named allIndexOf. This code extends javascript and does not require jQuery.
Originally if you wanted the second instance of a search string, you'd have to call "indexOf" twice. The second time with the starting index of the first result (plus one), or once with a guessed starting index. This should simplify the process for getting any or all of the indexes. And yes, I woke up with a strange urge to write this function LOL.
Originally if you wanted the second instance of a search string, you'd have to call "indexOf" twice. The second time with the starting index of the first result (plus one), or once with a guessed starting index. This should simplify the process for getting any or all of the indexes. And yes, I woke up with a strange urge to write this function LOL.
/*Use it as follows:
String.allIndexOf(searchstring, ignoreCase)
String [String] - the string to search within for the searchstring
searchstring [String] - the desired string with which to find starting indexes
ignoreCase [Boolean] - set to true to make both the string and searchstring case insensitive
*/
(function(){
String.prototype.allIndexOf = function(string, ignoreCase) {
if (this === null) { return [-1]; }
var t = (ignoreCase) ? this.toLowerCase() : this,
s = (ignoreCase) ? string.toString().toLowerCase() : string.toString(),
i = this.indexOf(s),
len = this.length,
n,
indx = 0,
result = [];
if (len === 0 || i === -1) { return [i]; } // "".indexOf("") is 0
for (n = 0; n <= len; n++) {
i = t.indexOf(s, indx);
if (i !== -1) {
indx = i + 1;
result.push(i);
} else {
return result;
}
}
return result;
}
})();
var s = "The rain in Spain stays mainly in the plain";Try out your own strings in the demo below or full screen.
s.allIndexOf("ain"); // result [ 5,14,25,40 ]
s.allIndexOf("the"); // result [ 34 ]
s.allIndexOf("THE", true); // result [ 0,34 ]