извлечь из массива и присвоить в переменные JavaScript

Дана строка:

str = ' +1-921-512-2222 <Wilfrid Stevens> Wild Street AA-67209'

необходимо извлечь данные в такие переменные: name, phone, address. Порядок следования данных в строке смешанный, но всегда имя - в угловых скобках, номер - это группы цифр с разделителем "-", иногда первый символ в такой подстроке начинается с '+' и оставшиеся подстроки - это адрес. Преобразуя str.split(' ') получаю [' ', '+1-921-512-2222', '<Wilfrid', 'Stevens>', 'Wild', 'Street', 'AA-67209']. Пытаюсь вытянуть через регулярные выражения нужные подстроки:

let [
    name = temp.search(/[<>]/g),
    phone = temp.search(/[+-]/g),
    ...address
  ] = temp

но, требуемого результата не получаю. Нужно ли преобразовывать строку в массив и как в этом случае быть с подстрокой, содержащей имя

<John Smith>

эта подстрока разбивается на два элемента...
Корректны ли регулярные выражения для извлечения требуемых значений? Какой наиболее оптимальный алгоритм решения.


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

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

Не факт, что канонический вариант в плане регулярок - просто удовлетворяет озвученные условия.

str = ' +1-921-512-2222 <Wilfrid Stevens> Wild Street AA-67209';

let nameArr = str.match(/<(\D+)>/);
let phone = str.match(/\+?\d+[\-,\d]+/)[0];
let address = str.replace(nameArr[0], '').replace(phone,'').trim();
let name = nameArr[1];

console.log([name, phone, address]);

→ Ссылка