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