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.
/* 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; } })();Use it as follows:
var s = "The rain in Spain stays mainly in the plain"; s.allIndexOf("ain"); // result [ 5,14,25,40 ] s.allIndexOf("the"); // result [ 34 ] s.allIndexOf("THE", true); // result [ 0,34 ]Try out your own strings in the demo below or full screen.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.