quick solution, excuse the bad variable names:
var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>";
var l1 = allString.split("<br>");
var l2 = l1.map( function(elem) { return elem.split("|"); } )
var l3 = l2.sort( function(a,b) { return a[1].localeCompare(b[1]); } )
var l4 = l3.map( function(elem) { return elem.join("|"); } );
var output = l4.join("<br>");
console.log(allString);
console.log(output);
output:
|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>
|AQW09|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW12|2|34|33|12|<br>
the variable l3
contains the data in array form:
[ [ 'AQW09', '2', '34', '33', '12' ],
[ 'AQW11', '2', '34', '33', '12' ],
[ 'AQW12', '2', '34', '33', '12' ] ]
for comments on localCompare
, refer to https://stackoverflow.com/a/2167619/1689451
of course, you could also use method chaining, if you like to show off :)
var output = allString.split("<br>")
.map( function(elem) { return elem.split("|"); } )
.sort( function(a,b) { return a[1].localeCompare(b[1]); } )
.map( function(elem) { return elem.join("|"); } )
.join("<br>");