| // adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956 | 
|   | 
| var NUMBER_PATTERN = /([0-9]+)/; | 
|   | 
| function naturalCompare(value1, value2) { | 
|   var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt); | 
|   var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt); | 
|   var key1; | 
|   var key2; | 
|   var compareFirst = Math.min(keys1.length, keys2.length); | 
|   var i, l; | 
|   | 
|   for (i = 0, l = compareFirst; i < l; i++) { | 
|     key1 = keys1[i]; | 
|     key2 = keys2[i]; | 
|   | 
|     if (key1 != key2) { | 
|       return key1 > key2 ? 1 : -1; | 
|     } | 
|   } | 
|   | 
|   return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1); | 
| } | 
|   | 
| function tryParseInt(value) { | 
|   return ('' + parseInt(value)) == value ? | 
|     parseInt(value) : | 
|     value; | 
| } | 
|   | 
| module.exports = naturalCompare; |