Как разделить текст на пары ключ:значение

Пользователь вводит текст в который примерно выглядит так:

"ASB - 21 ASBW - 32 ASDWAE - 345 "

Как правильно разделить на пары ключ значение. Если убрать пробелы, то получается: ASB-21ASBW-32ASDWAE-345 Как правильно подобрать регулярное выражение для split?


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

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

Сначала можно разделить пары ключ-значение по пробелам, которые не соседят с дефисом. Потом эти пары можно разделить на ключ и значение по дефису с пробелами. Если нужно, получившийся двумерный массив можно легко превратить в объект.

const input = 'ASB - 21 ASBW - 32 ASDWAE - 345';

const pairs = input
  .split(/(?<!-)\s(?!-)/)
  .map(str => str.split(' - '));

console.log(pairs);

const object = Object.fromEntries(pairs);

console.log(object);

Если пробелы не обязательны, тогда можно немного усложнить:

const input = 'ASB-21ASBW - 32 ASDWAE-345';

const pairs = input
  .split(/(?<=\d) *(?=[a=z])/i)
  .map(str => str.split(/ *- */));

console.log(pairs);

const object = Object.fromEntries(pairs);

console.log(object);

→ Ссылка