Мне нужно проанализировать строку, которая представляет собой список параметров формы, разделенных запятыми.
key1=value1,key2=value2,key3=value3...
Сложность заключается в том, что значения могут быть заключены в кавычки, чтобы они могли содержать пробелы, запятые и т. Д. Конечно, запятые, заключенные в кавычки, не должны считаться разделительными параметрами. (Кроме кавычек в различных местах могут быть пробелы, которые, возможно, следует игнорировать.)
Моя мысль состоит в том, чтобы разделить список на запятые, а затем внутри каждого определения параметра, чтобы отделить ключ от значения со знаком равенства. Итак, чтобы split
параметры, мне нужно найти действительные (не в кавычках); Я думаю, что регулярное выражение - это путь для краткости и прямоты.
Вот несколько примеров строк:
Include="All Violations", CheckType=MaxTrans
MetricName = PlacedInstances, PlacedOnly = 1
CheckType=Hold, Include="reg2reg,in2reg,in2out,reg2out"
CheckType=Setup, Include="reg2reg,in2reg,in2out,reg2out
(так в оригинале)
Да, последний плохо сформирован: в значении отсутствует закрывающая кавычка.
Я нашел этот ответ полезным (регулярное выражение: /,(?=(?:(?:[^"]*"){2})*[^"]*$)/
), за исключением разбора плохо сформированного. В моем случае у меня есть дополнительная информация под знаком равенства, которая позволит ее разобрать.
Я пробовал это: (/(?<==[^"]+),/
, который работает с плохо сформированным, но не работает в моем первом примере. Я думаю, что мне нужен способ найти запятые, которым предшествует знак равенства, но которые имеют либо ноль, либо две кавычки (а не только одну кавычку) между ними и первым предшествующим знаком равенства. Но как мне написать это в Javascript Regex?