Skip to content

Instantly share code, notes, and snippets.

@cowboy
Created April 26, 2012 21:26
Show Gist options
  • Select an option

  • Save cowboy/2503350 to your computer and use it in GitHub Desktop.

Select an option

Save cowboy/2503350 to your computer and use it in GitHub Desktop.
JavaScript: indexOf-based string "split" (loosely based on Ruby's String#split)
// For Gianni
String.prototype.indexOfSplit = function(separator, n) {
var str = String(this);
var result = [];
var position;
while (str && --n > 0) {
position = separator === '' ? 1 : str.indexOf(separator);
if (position === -1) {
result.push(str);
str = null;
} else {
result.push(str.slice(0, position));
str = str.slice(position + separator.length);
}
}
if (str) { result.push(str); }
return result;
};
"abcd".indexOfSplit("", 1) // [ 'abcd' ]
"abcd".indexOfSplit("", 2) // [ 'a', 'bcd' ]
"abcd".indexOfSplit("", 3) // [ 'a', 'b', 'cd' ]
"abcd".indexOfSplit("", 4) // [ 'a', 'b', 'c', 'd' ]
"abcd".indexOfSplit("", 5) // [ 'a', 'b', 'c', 'd' ]
"a;b;c;d".indexOfSplit(";", 1) // [ 'a;b;c;d' ]
"a;b;c;d".indexOfSplit(";", 2) // [ 'a', 'b;c;d' ]
"a;b;c;d".indexOfSplit(";", 3) // [ 'a', 'b', 'c;d' ]
"a;b;c;d".indexOfSplit(";", 4) // [ 'a', 'b', 'c', 'd' ]
"a;b;c;d".indexOfSplit(";", 5) // [ 'a', 'b', 'c', 'd' ]
"a;;b;;c;;d".indexOfSplit(";;", 1) // [ 'a;;b;;c;;d' ]
"a;;b;;c;;d".indexOfSplit(";;", 2) // [ 'a', 'b;;c;;d' ]
"a;;b;;c;;d".indexOfSplit(";;", 3) // [ 'a', 'b', 'c;;d' ]
"a;;b;;c;;d".indexOfSplit(";;", 4) // [ 'a', 'b', 'c', 'd' ]
"a;;b;;c;;d".indexOfSplit(";;", 5) // [ 'a', 'b', 'c', 'd' ]
"aa;bb;cc;dd".indexOfSplit(";", 1) // [ 'aa;bb;cc;dd' ]
"aa;bb;cc;dd".indexOfSplit(";", 2) // [ 'aa', 'bb;cc;dd' ]
"aa;bb;cc;dd".indexOfSplit(";", 3) // [ 'aa', 'bb', 'cc;dd' ]
"aa;bb;cc;dd".indexOfSplit(";", 4) // [ 'aa', 'bb', 'cc', 'dd' ]
"aa;bb;cc;dd".indexOfSplit(";", 5) // [ 'aa', 'bb', 'cc', 'dd' ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment