我有一个字符串:
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):")
分裂
我会把第一部分作为关键,第二部分是其价值。
答案 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);