Regarding author names, it's too much of a mess to fix it properly, but, as I said before, I would at least want to prevent this breaking sync, so here's some code for that:
```
text = text.replace(/^(A[U123]|ED)\s+-\s+(.+[,;].+)$/mg, function(m, tag, authorStr) {
  var authors = authorStr.split(';');
  var fixName = false;
  if(authors.length == 1)  {
    //no semicolon
    fixName = true;
    authors = authorStr.split(',');
    if(authors.length < 3) {
      //at most single comma, don't mess with it
      return m;
    }
  }

  var str = '';
  for(var i=0; i<authors.length; i++) {
    var author = authors[i].trim();
    if(fixName && author.indexOf(',') == -1 && author.indexOf(' ') != -1) {
      var splitAt = author.lastIndexOf(' ');
      author = author.substring(splitAt+1) + ', ' + author.substring(0, splitAt);
    }
    if(author) str += '\n' + tag + '  - ' + author;
  }
  return str.substr(1);
});
```