Use this:
var source = "4741:GREEN,CIRHOSIS,ORANGE,Long-term,GREEN,HIS B CHIC,4642:GREEN,CRHOSIS,GREEN,HSysk B CC,4643:GREEN,CRHOSIS,GREEN,HSysk B CC,4644:GREEN,CRHOSIS,GREEN,HSysk B CC,4645:GREEN,CRHOSIS,GREEN,HSysk B CC,4646:GREEN,CRHOSIS,GREEN,HSysk B CC,";
var extractRecordsAsArray = function (source) {
var records = [];
if (source && source.split) { // is string
var re = new RegExp("[0-9]+:[^0-9:]+", "g");
var entries = source.match(re);
for (var i = 0, len = entries.length; i < len; i++) {
var entry = entries[i].split(':');
records.push([entry[0], entry[1].split(',')]);
}
}
return (records);
};
console.log("records: %o", extractRecordsAsArray(source));
Or this if you prefer a map for storage:
var extractRecordsAsMap = function (source) {
var records = {};
if (source && source.split) { // is string
var re = new RegExp("[0-9]+:[^0-9:]+", "g");
var entries = source.match(re);
for (var i = 0, len = entries.length; i < len; i++) {
var entry = entries[i].split(':');
records[entry[0]] = entry[1].split(',');
}
}
return (records);
};
console.log("records: %o", extractRecordsAsMap(source));
Not guaranteed bullet-proof and to be the most efficient, but will achieve decent performance for fairly big strings and works fine.