我尝试实现一个属性路径规范化器,这样以后可以快速计算结果。
以下是我的初步实现:
function normalize(path: string): (string | number)[] {
const res = [], reg = /\[\s*(\d+)|["']([^"']+)["']\s*]|[a-z_$0-9]+/gi;
let a;
while (a = reg.exec(path)) {
res.push(a[1] ? parseInt(a[1]) : a[3] || a[2] || a[0]);
}
return res;
}
它可以接受如下输入:
first.a.b[123].c['prop1'].d["prop2"].last
,并生成以下快速分辨率阵列:
['first', 'a', 'b', 123, 'c', 'prop1', 'd', 'prop2', 'last']
'
和
"
,对于这样的输入:
first["a\'b"].second['"']
.
更确切地说,我不知道如何采取其中一种解决办法
here
,并将它们注入我的正则表达式中。这些解决方案本身工作得很好,只是不是作为我自己正则表达式的一部分,所以将两个表达式合并为一个是我一直面临的问题。