function parseRange
Creates an array from a "range string" Examples: "3:8,1,2" => [3,4,5,6,7,8,1,2] "1:2:9" => [1,3,5,7,9]
by Santiago J
HTML
<input type="text" id="rangestr" value="10:2:0">
<button onclick="log(parseRange($('#rangestr').value));">Parse Range String</button><br>
<textarea id="log"></textarea>
CSS
#log {
width: 400px;
height: 400px;
}
JavaScript
/* Log utils */
function $(s, a) { return document["querySelector" + (a ? "All" : "")](s); }
function log(s) { $("#log").value += s + "\n"; }
// parseRange creates an array from a range string.
// The range string can be formatted in one of two ways:
// "start:stop" or "start:step:stop"
// The step parameter will default to 1 when omitted.
//
// Examples:
// parseRange("1:5") => [1,2,3,4,5]
// parseRange("3:-3") => [3,2,1,0,-1,-2,-3]
// parseRange("3:2:9") => [3,5,7,9]
function parseRange(rstr) {
var parts = rstr.replace(/[^\d\-:,]/g, "").split(","),
rarr = [],
i, seg, start, stop, step, n;
for (i = 0; i < parts.length; i++) {
seg = parts[i].split(":");
if (seg.length < 1 || seg.length > 3) throw new Error("Malformed range string.");
if (seg.length === 1) {
rarr.push(+seg[0]);
} else {
start = +seg[0];
step = seg.length === 3 && +seg[1] || 1;
stop = seg.length === 2 ? +seg[1] : +seg[2];
if (stop > start ? step < 0 : step > 0) step = -step;
for (n = start; step > 0 ? n <= stop : n >= stop; n += step) rarr.push(n);
}
}
return rarr;
}
window.onload = function(){
log(parseRange("1:5,11,12")); // => [1,2,3,4,5,7,9,11,13]
log(parseRange("50:5:100")); // => [50,55,60,65,70,75,80,85,90,95,100]
log(parseRange("1:5,5,5,6:2:10")); // => [1,2,3,4,5,5,5,6,8,10]
log(parseRange("100:20:-100")); // => [100,80,60,40,20,0,-20,-40,-60,-80,-100]
}