JSFiddle - React, Tailwind, and code Playground

JavaScript

var data = ["a1b3","a10b11","b10b2","a9b2","a1b20","a1c4"];

function compareLists(a,b){
    var alist = a.split(/(\d+)/),
        blist = b.split(/(\d+)/);
    
    alist.slice(-1) == '' ? alist.pop() : null;
    blist.slice(-1) == '' ? blist.pop() : null;

    for (var i = 0, len = alist.length; i < len;i++){
        if (alist[i] != blist[i]){
           if (alist[i].match(/\d/))
           {
              return +alist[i] - +blist[i];
           } else {
              return alist[i].localeCompare(blist[i]);
           }
        }
    }
   
    return true;
}

data.sort( compareLists );

alert(data);