This is unfortunately a lot more complex than it may first seem, and how you handle it may have to do largely with the end goal for the data.
Here's a post that covers this same issue in fairly great depth -
SQL: parse the first, middle and last name from a fullname field
As Gilbert pointed out, some names are just different, and it will be hard to get everything right, but there are certainly things you can do to limit errors.
One of the better pieces of advice from that article would be to alter your collection method to get First/Middle/Last/Suffixes/Prefixes entered separately and join them after, rather than try to parse through richer text that contains them all.
Here is a function that you could get creative with - https://blog.seandaylor.com/sql-server-split-part/