Вот, что то такое изобрел. Может пойдет в Adobe
<script>
function nsort (a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
var re = /(\D*)((0*)(\d*))(.*)/;
var ra = re.exec(a)
var rb = re.exec(b)
if (ra[4].length && rb[4].length) {
if(ra[1] === rb[1]) {
if (ra[3].length != rb[3].length) return rb[3].length - ra[3].length
var na = +ra[2]
var nb = +rb[2]
if (na != nb) return na - nb;
} else {
return ra[1]>rb[1]? 1 : (ra[1]<rb[1]? -1 : 0);
}
if (ra[5].length || rb[5].length) return nsort(ra[5], rb[5])
return 0;
}
return a>b? 1 : (a<b? -1 : 0);
}
const arr = ["A", "B", "C", "x1a3", "x1a", "x1b", "x01a", "011", "g10", "x1a02", "g8", "g1", "g01", "g001", "g081", "11", "H", "x1a2", "b0", "b00"]
arr.sort(nsort)
console.log(arr)
document.write(JSON.stringify(arr))
</script>
Предполагается, что x001 < x01 <x1, но x0 < x00