-
No escape:
/([^=,]*)=("[^"]*"|[^,"]*)/
-
Double quote escape for both key and value:
/((?:"[^"]*"|[^=,])*)=((?:"[^"]*"|[^=,])*)/ key=value,"key with "" in it"="value with "" in it",key=value" "with" "spaces
-
Backslash string escape:
/([^=,]*)=("(?:\\.|[^"\\]+)*"|[^,"]*)/ key=value,key="value",key="val\"ue"
-
Full backslash escape:
/((?:\\.|[^=,]+)*)=("(?:\\.|[^"\\]+)*"|(?:\\.|[^,"\\]+)*)/ key=value,key="value",key="val\"ue",ke\,y=val\,ue
Edit: Added escaping alternatives.
Edit2: Added another escaping alternative.
You would have to clean up the keys/values by removing any escape-characters and surrounding quotes.