Как разбить строку на подстроки с учетом кавычек с помощью 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. Я предположил следующие правила:
- Пары ключ/значение разделяются пробелом.
- Ключ может содержать только латиницу и цифры.
- Если значение состоит только из латиницы и цифр, оно может не заключаться в кавычки.
- Внутри кавычек возможны пары кавычек как экранированные кавычки.
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));