Разбор шаблонной строки - PullRequest
       2

Разбор шаблонной строки

0 голосов
/ 06 сентября 2018

У меня есть такая строка

const str = 'map("a")to("b");map("foo")to("bar");map("alpha")to("beta");'

Я хотел разобрать эту строку, чтобы сгенерировать json что-то вроде

[{id: 'a', map: 'b'},
{id: 'foo', map: 'bar'},
{id: 'alpha', map: 'beta'}]

Мне было интересно, является ли регулярное выражение лучшим способом сделать это или есть ли какая-нибудь утилита lib, которую я мог бы использовать

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вот регулярное выражение, которое должно работать для вашего текущего случая:

const str = 'map("a")to("b");map("foo")to("bar");map("alpha")to("beta");';

const res = str.split(";").map(e => {
  const k = e.match(/map\("(.+?)"\)to\("(.+?)"\)/);
  return k && k.length === 3 ? {id: k[1], map: k[2]} : null;
}).filter(e => e);

console.log(res);

Идея состоит в том, чтобы разбить точку с запятой (для обработки случаев, когда точки с запятой являются частью желаемого ключа / значения, можно использовать обход), а затем map эти пары в желаемый формат объекта на основе регулярного выражения, которое анализирует map("")to("") формат. Наконец, null s отфильтрованы.

0 голосов
/ 06 сентября 2018

Я почти уверен, что есть хорошее решение для регулярных выражений, которое короче и быстрее, но так как я плохо разбираюсь в регулярных выражениях, я решаю такие вещи:

const str = 'map("a")to("b");map("foo")to("bar");map("alpha")to("beta");'

const result = str.split(';').map(e => {

  const parts = e.substring(3).split('to').map(item => item.replace(/\W/g, ''));

  return {
    id: parts[0],
    map: parts[1]
  };
})
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...