Well, it always gets the first (and middle) name of the
last author...
Try this:
Code:
{author_sort:re(^(.*?)\, (.*?)( & .*|$),\2)}
Anchoring the start and end of the string can often be a good idea

also re() will keep going through the string to find as many matches as it can.