var array = [\'92256a\', \'10a\', \'4567b\', \'4567a\', \'1000a\', \'C1234\', \'245W5\', \'500a\', \'500\', \'D418\', \'C2456\'];


var compare = function(a, b){
    
    if(a == b)
        return 0;
    if(!!a.match(/^\\d/) && !b.match(/^\\d/))
        return -1;

    if(!!a.match(/^\\d/)){
        var s_a = parseInt(a.match(/^\\d+/));
        var s_b = parseInt(b.match(/^\\d+/));
    }else if(!a.match(/^\\d/)){
        var s_a = a.match(/^\\D+/);
        var s_b = b.match(/^\\D+/);
    }
    if(s_a != s_b)
        return (s_a < s_b) ? -1 : 1;
    else
        return compare(a.replace(s_a, \"\"), b.replace(s_b, \"\"));
}
array.sort(compare);

그냥 물어버렸다.


물론 모든 경우에 제대로 돌아가는지 검증안됨.