JSFiddle - React, Tailwind, and code Playground

JavaScript

var list = ["x1b3","a10b11","a10b2","z9b2"];

function sort(list) {
    var i, l, mi, ml, x;
    // copy the original array
    list = list.slice(0);
    
    // split the strings, converting numeric (integer) parts to integers
    // and leaving letters as strings
    for( i = 0, l = list.length; i < l; i++ ) {
        list[i] = list[i].match(/(\d+|[a-z]+)/g);
        for( mi = 0, ml = list[i].length; mi < ml ; mi++ ) {
            x = parseInt(list[i][mi], 10);
            list[i][mi] = !!x || x === 0 ? x : list[i][mi];
        }
    }
    
    // sort (deep and without string conversion)
    list = list.sort(function(a, b) {
        var i = 0, l = a.length, res = 0;
        while( res === 0 && i < l) {
            if( typeof a[i] === "number" && a[i] !== b[i] ) {
                res = a[i] < b[i] ? -1 : 1;
                break;
            }
            
            // If you want to ignore the letters, and only sort by numbers
            // use this instead:
            // 
            // if( typeof a[i] === "number" && a[i] !== b[i] ) {
            //     res = a[i] < b[i] ? -1 : 1;
            //     break;
            // }
            
            i++;
        }
        return res;
    });
    
    // glue it together again
    for( i = 0, l = list.length; i < l; i++ ) {
        list[i] = list[i].join("");
    }
    return list;
}

console.log(list);
console.log(sort(list));