JavaScript正则表达式将字符串转换为对象

时间:2017-05-05 22:46:25

标签: javascript regex

我有一个字符串如下:

var str = "
a:aaa
b:bbb"

将此字符串转换为JavaScript对象的最佳方法是什么?

{a:"aaa", b:"bbb"}

3 个答案:

答案 0 :(得分:2)

不一定是最好的方式,但 a 方式:

console.log(
  "a:aaa\nb:bbb".split('\n').reduce(
    (obj, line) => {
      const [key, val] = line.split(':');
      obj[key] = val;
      return obj;
    },
    {}
  )
);

按换行符拆分行,遍历每一行,将其拆分为:并将其添加到对象中。

答案 1 :(得分:2)

您可以将模式^([^:]):(.*)$与全局g和多行m标志一起使用。此模式要求每一行都采用x:y格式,而x不能包含冒号,并且必须至少有一个冒号。

var text = document.getElementById('element').textContent;
var regex = /^([^:]):(.*)$/gm;

var match = regex.exec(text);
var object = {};
while(match != null) {
  object[match[1]] = match[2];
  match = regex.exec(text);
}

console.log(object);
<pre id="element">
a:aaa
b:bbb
</pre>

答案 2 :(得分:1)

地图/缩小解决方案:

var str = "\na:aaa\nb:bbb"

var obj = str
        // split into lines
        .split("\n")
        // only keep lines with a ':'
        .filter(function(x) { return x.indexOf(':') !== -1; })
        // At this point we have Array [ "a:aaa", "b:bbb" ]
        // foreach line, split into key and value, and put 
        // in an array
        .map(function(line) { return line.split(':'); })
        // At this point we have Array[['a', 'aaa'], ['b', 'bbb']]
        // use reduce: use an empty object as the accumulator
        // and add keys/values sequentially
        .reduce(function(acc, el) { acc[el[0]] = el[1]; return acc }, {});
        
console.log(obj);