Если вы хотите, чтобы форма придерживалась необязательных кавычек без их указания в захвате ключа или значения, вы можете сделать что-то вроде этого (используя свое регулярное выражение в качестве примера и включая возможные одинарные кавычки в качестве разделителей).
Буферы захвата 2,4 содержат пары ключ-значение (без кавычек).
"
(['\"]?) ([^'\"=,]+) \1
=
(['\"]?) ([^'\"=,]+) \3
"
Но при этом будут собраны возможные значения мусора, разделенные знаком =.
Я думаю, что лучшепредоставьте класс, который включает ограниченное допустимое valeus вместо этого.
Что-то вроде этого - то, что я использовал бы.
"
(['\"]?) \s* (\w[-:\s\w]*?) \s* \1
\s* = \s*
(['\"]?) \s* (\w[-:\s\w]*?) \s* \3
"
возможная жадная версия
\w+ (?: \s+[-:\w]+ )*
или
[-:\w]+ (?: \s+[-:\w]+ )*
в этом
"
(['\"]?) \s* (\w+(?:\s+[-:\w]+)*) \s* \1
\s* = \s*
(['\"]?) \s* (\w+(?:\s+[-:\w]+)*) \s* \3
"