var reA = /[^a-zA-Z]/g; var reN = /[^0-9]/g; someArray.sort(function(a,b) { if((a.attributes['data-user'].nodeValue !== null) && (b.attributes['data-user'].nodeValue !== null)) { var smlla = a.attributes['data-user'].nodeValue.toLowerCase(); var smllb = b.attributes['data-user'].nodeValue.toLowerCase(); var aA = smlla.replace(reA, ""); var bA = smllb.replace(reA, ""); if(aA === bA) { var aN = parseInt(a.attributes['data-user'].nodeValue.replace(reN, ""), 10); var bN = parseInt(b.attributes['data-user'].nodeValue.replace(reN, ""), 10); return aN === bN ? 0 : aN < bN ? 1 : -1; } else { return aA < bA ? 1 : -1; } } else return 0; });