Json来自使用正则表达式的字符串

时间:2017-09-30 08:08:11

标签: javascript json regex string

我有一个字符串:

const stringVar = ":20:9077f1722efa3632 :12:700 :77E:  :27A:2/2 :21A:9077f1722efa3632 :27:1/2 :40A:IRREVOCABLE"

我想从stringVar上面创建JSON:

{
  ":21:" : "9077f1722efa3632",
  ":12:" :  "700",
  ":27A:":  "2/2",
  ":21A:":  "9077f1722efa3632",
  ":27:" :  "1/2",
  ":40A:":  "IRREVOCABLE"
}

所以,我以为我可以用正则表达式(":(any Of char/digit):")分裂 我会把第一部分作为关键,第二部分是其价值。

2 个答案:

答案 0 :(得分:2)

正则表达式/(:\w+:)(\S+)/与整个key:value对匹配。您可以添加g修饰符,然后在循环中使用它来获取所有匹配项并将它们放入对象中。

const stringVar = ":20:9077f1722efa3632 :12:700 :77E:  :27A:2/2 :21A:9077f1722efa3632 :27:1/2 :40A:IRREVOCABLE"

var regexp = /(:\w+:)(\S+)/g;
var obj = {};
var match;
while (match = regexp.exec(stringVar)) {
  obj[match[1]] = match[2];
}
console.log(obj);

如果要创建{key: ":20:", value: "9077f1722efa3632"}数组,可以将代码修改为:

const stringVar = ":20:9077f1722efa3632 :12:700 :77E:  :27A:2/2 :21A:9077f1722efa3632 :27:1/2 :40A:IRREVOCABLE"

var regexp = /(:\w+:)(\S+)/g;
var array = [];
var match;
while (match = regexp.exec(stringVar)) {
  array.push({key: match[1], value: match[2]});
}
console.log(array);

如果值可以包含空格,请将正则表达式更改为:

/(:\w+:)([^:]+)\s/g

这将匹配任何不包含:的值作为值,但不包括最后一个空格。

答案 1 :(得分:0)

您可以在不使用regex的情况下获得相同的结果。

const stringVar = ":20:9077f1722efa3632 :12:700 :77E:xxx :27A:2/2 :21A:9077f1722efa3632 :27:1/2 :40A:IRREVOCABLE";

const result = stringVar
  .split(' ')
  .reduce((ret, current) => {
    const pos = current.indexOf(':', 1);
    ret[current.substring(0, pos + 1)] = current.substring(pos + 1);
    return ret;
  }, {});

console.log(result);