Как разбить строку на подстроки с учетом кавычек с помощью RegEx

Коллеги, добрый день! Никак не могу придумать подходящий RegEx что бы разбить строку, прошу вашей помощи.

Вот строка:

ObjectKey="ИсторияВыбора" SettingsKey="" UserId="Авбг ДЕ ИКЛ (МНОПРСТ)" Fld46538="{""#"",784bb020-f9e0-4a39-bf27-71d2b228a981,0:bab900259066e1b911e8c53f585e588b}" Fld46539=E373A3C4CC7F9D44854C5A02EBC08E7A Fld46541=""

На выходе требуется получить следующее:

ObjectKey="ИсторияВыбора"
SettingsKey=""
UserId="Авбг ДЕ ИКЛ (МНОПРСТ)"
Fld46538="{""#"",784bb020-f9e0-4a39-bf27-71d2b228a981,0:bab900259066e1b911e8c53f585e588b}"
Fld46539=E373A3C4CC7F9D44854C5A02EBC08E7A
Fld46541=""

Ответы (1 шт):

Автор решения: vsemozhetbyt

Посторался использовать универсальные возможности, поддерживаемые в PCRE и PHP. Я предположил следующие правила:

  1. Пары ключ/значение разделяются пробелом.
  2. Ключ может содержать только латиницу и цифры.
  3. Если значение состоит только из латиницы и цифр, оно может не заключаться в кавычки.
  4. Внутри кавычек возможны пары кавычек как экранированные кавычки.

const str = 'ObjectKey="ИсторияВыбора" SettingsKey="" UserId="Авбг ДЕ ИКЛ (МНОПРСТ)" Fld46538="{""#"",784bb020-f9e0-4a39-bf27-71d2b228a981,0:bab900259066e1b911e8c53f585e588b}" Fld46539=E373A3C4CC7F9D44854C5A02EBC08E7A Fld46541=""';

const re = /(?<=^| )\w+=(?:"(?:[^"]|"")*"|\w+)(?= |$)/g;

console.log(str.match(re));

→ Ссылка