module.exports = function naturalCmp(str1, str2) { if (str1 == str2) return 0; if (!str1) return -1; if (!str2) return 1; var cmpRegex = /(\.\d+|\d+|\D+)/g, tokens1 = String(str1).match(cmpRegex), tokens2 = String(str2).match(cmpRegex), count = Math.min(tokens1.length, tokens2.length); for (var i = 0; i < count; i++) { var a = tokens1[i], b = tokens2[i]; if (a !== b) { var num1 = +a; var num2 = +b; if (num1 === num1 && num2 === num2) { return num1 > num2 ? 1 : -1; } return a < b ? -1 : 1; } } if (tokens1.length != tokens2.length) return tokens1.length - tokens2.length; return str1 < str2 ? -1 : 1; };