小ネタ:文字列#replaceで簡易パースは便利だけどどうもね。

string#replace関数に、関数が渡せることをご存知でしょうか?

https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/String/replace

function replacer(str, p1, p2, offset, s)
{
  return str + " - " + p1 + " , " + p2;
}
var newString = "XXzzzz".replace(/(X*)(z*)/, replacer);

returnで返した文字列に置換されるというものですが、これを使って簡易パーサーを書くことが出来ます。

var str = 'banana,apple,orange',
    vals = [];

str.replace(/[^,]+/g, function(s) {
  vals.push(s);
});

console.log(vals); // ['banana', 'apple', 'orange'];

割と使われてる小技だけど、変態っぽいし「replace」って名前が気になるしそもそも内部で無駄な処理が走ってるはず。
なんで真面目にRegExp#execを使って頑張ってみる。
https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/RegExp/exec

var str = 'banana,apple,orange',
    vals = [];

(function() {
  var r = /[^.]+/g, match;
  while ((match = r.exec(str)) != null) {
    vals.push(match[0]);
  }
}})();

console.log(vals); // ['banana', 'apple', 'orange'];

名前空間を汚さないように関数でくくるため、長くなる。くくらなくても1行長い。
しかも、string#replaceでパースする場合、以下のような見やすい書き方が出来る。

var str = '12:15-13:40',
    start,
    end;

str.replace(/(\d+:\d+)-(\d+:\d+)/g, function(s, hm1, hm2) {
  start = hm1;
  end = hm2;
});

console.log(start, end); // 12:15, 13:40

分かりやすいですよね。
しかし、同じ動きをする関数をexecで作るのがベターだとは思う。