Javascript/NodeJS разбивка строки по формату

223
30 августа 2021, 20:10

Допустим есть строка вида aaaa|qqqq|www|bbbb;ccc Я хочу задать формат в виде $1|$2|$name|$4;$5 И получить объект согласно описанному выше формату с такими же ключами. Подразумевается что я сам несу ответственность за правильность введенного формата(т.е. строка должна иметь именно такой формат, который будет указан). Строка при этом может иметь больше описанных символов, в таком случае остальные символы попадают в последний элемент массива

Например: Строка - aaaa|qqqq|www|bbbb;ccc. Формат - $1|$2|$name|$4;$5. Должно получиться: {1: 'aaaa', 2: 'qqqq': name: 'www', 4: bbbb, 5: ccc}

Строка - aaaa|qqqq|www|bbbb;ccc216asdy1%@&!^67. Формат - $1|$2|$name|$4;$5. Должно получиться: {1: 'aaaa', 2: 'qqqq': name: 'www', 4: bbbb, 5: ccc216asdy1%@&!^67}

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

Answer 1

Я так понял разделители '|' и ';', так почему не воспользоваться split().

parseString=(text)=>{ 
  let array=text.split('|'),lastElement; 
  lastElement=array.pop().split(';'); 
  lastElement.forEach(e=>{ 
    array.push(e) 
  }) 
  return array 
} 
textToArray=(text,format)=>{ 
  let err=false; //флаг проверяет количество переменных в формате и тексте 
  let textJSON='{'; 
  let arrayFormat=parseString(format), 
      arrayText=parseString(text); 
  if(arrayFormat.length===arrayText.length){ 
    for(let i=0;i<arrayFormat.length;i++){ 
      if(i){textJSON+=','} 
      textJSON+="\""+arrayFormat[i].substr(1)+"\":"+"\""+arrayText[i]+"\"" 
    } 
  }else(err=true) 
  textJSON+="}" 
  return err?'Ошибка формата':JSON.parse(textJSON) 
} 
console.log(textToArray("aaaa|qqqq|www|bbbb;ccc",'$1|$2|$name|$4;$5')) 
console.log(textToArray("aaaa|qqqq|www|bbbb;ccc216asdy1%@&!^67",'$1|$2|$name|$4;$5')) 
console.log(textToArray("aaaa|^67",'$1|$2|$dfgdfgd|$name|$4;$5')) 
console.log(textToArray("aaaa|qqqq|sdfsdfsd|www|bbbb;ccc216asdy1%@&!^67",'$1|$2|$dfgdfgd|$name|$4;$5'))

READ ALSO
Не запускается скрипт для вывода правильной последовательности скобок

Не запускается скрипт для вывода правильной последовательности скобок

Есть код на для вывода правильной последовательности n элементов, переписал его под python, но он не работаетВ чём моя ошибка?

152
new (функция конструктор)

new (функция конструктор)

Когда вызываешь функцию с new, то берется конструктор этой функции и создается объектКак можно вызвать такую функцию так, чтобы она вернула...

180
Как из строки вытащить число на javascript

Как из строки вытащить число на javascript

Как из строки такого вида "20:153" "1568:23" вытащить число после двоеточия?

87
Вывод даты + 60 дней в input value [дубликат]

Вывод даты + 60 дней в input value [дубликат]

Как можно реализовать (скриптом) вывод сегодняшней даты +60 днейТо есть, если сегодня, например, 07

81