我的目标是解析具有特定格式的字符串以从中生成 javascript 对象结构。
一个想法是使用带有函数的String.replace作为参数。所以在函数中你得到了比赛的所有部分。到目前为止我的测试/示例:
字符串:
!Norm: DIN 7985;
M2: 2, 2, 2;
M3:3,3;
M10: 20,25;
!Norm: DIN 7985 TX;
M4: 4, 4 , 4;
我的测试代码:
console.clear();
var sTmp = "!Norm: DIN 7985;\n M2: 2, 2, 2;\n M3:3,3;\n M10: 20,25;\n !Norm: DIN 7985 TX;\n M2: 6, 10 , 16;";
//console.log(sTmp);
function replacer(match, p1, p2, p3, p4, offset, string){
//console.log("-");
console.log("match:", match);
console.log("p1:", p1);
console.log("p2:", p2);
console.log("p3:", p3);
console.log("p4:", p4);
console.log("offset:", offset);
console.log("string:", string);
return "#";
}
//(?=!Norm:\s?(.+);\s+)
sTmp.replace(/\s*!Norm:\s?(.+);\s+(M\d+:.*\s*;)/g, replacer);
(在萤火虫中测试)控制台日志(缩短):
match: !Norm: DIN 7985; M2: 2, 2, 2;
p1: DIN 7985
p2: M2: 2, 2, 2;
p3: 0
p4: !Norm: DIN 7985; M2: 2, 2, 2; M3:3,3; M10: 20,25; ....
offset: undefined
string: undefined
match: !Norm: DIN 7985 TX; M4: 4, 4 , 4;
p1: DIN 7985 TX
p2: M4: 4, 4 , 4;
p3: 52
p4: !Norm: DIN 7985; M2: 2, 2, 2; M3:3,3; M10: 20,25; !Norm: DIN 7985 TX; M4: 4, 4 , 4;
....
所以我可以看到这个想法是可行的——它符合规范,我在一个子字符串中得到了信息。现在有 M3:... 零件。那么是否有一个选项可以指定该部分(M\d+:.*\s*;)
匹配下一个 !Norm: 而不是 ; 第一次出现?我认为它应该可以通过前瞻或其他方式实现?
这个想法背后的目标是从字符串中生成一个像这样的javascript对象:
oDataTmp = {
DIN 7985 : {
M2 : ["2", "2", "2"],
M3 : ["3", "3"],
M10 : ["20", "25"],
}
DIN 7985 TX : {
M4 : ["4", "4", "4"],
}
}
我知道你可以通过拆分来做到这一点,然后逐行解析。我喜欢完成这个大脑任务并了解如何去做的挑战:-)