var str = "\u003cspan title=\"5 gold badges\"\u003e\u003cspan class=\"badge1\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e5\u003c/span\u003e\u003c/span\u003e\u003cspan title=\"8 silver badges\"\u003e\u003cspan class=\"badge2\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e8\u003c/span\u003e\u003c/span\u003e\u003cspan title=\"57 bronze badges\"\u003e\u003cspan class=\"badge3\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e57\u003c/span\u003e\u003c/span\u003e";
var res = {
gold: 0,
silver: 0,
bronze: 0
};
/* using a RexExp
/ - delimeter
(\d+) - capturing one or more digits
\s+ - one or more whitespace characters
(gold|silver|bronze) - capturing the color
/g - delimeter (global flag)
to match the information in the title of the spans
and using the replace trick to populate res
*/
str.replace( /(\d+)\s+(gold|silver|bronze)/g, function( all, count, color ) {
res[color] += parseInt( count );
});
console.log( res ); // Object { gold=5, silver=8, bronze=57}