解析模板字符串

时间:2018-09-05 22:23:08

标签: javascript json regex string parsing

我有这样的字符串

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'}]

我想知道正则表达式是执行此操作的最佳方法,还是我可以利用任何实用程序库

2 个答案:

答案 0 :(得分:3)

以下是适合您当前情况的正则表达式:

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个被过滤掉了。

答案 1 :(得分:0)

我很确定有一个不错的正则表达式解决方案,它更短,更快,但是由于我对正则表达式不好,所以我解决了以下问题:

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);