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; | |
}; | |