我正在使用只接受点符号(包括数组)的编译器。例如,对于下面的对象:
var defaults = {
'background-color': '#000',
color: '#fff',
tokens: [{token: '3der3ergfg44effg'},{token: '3dertkyohlhjeffg'},[
{tokenNest: 'sgvchjjd3fe5yd522s'},
{boomer: [33]}]]
};
console.log(defaults.tokens[2])
console.log(defaults.tokens[2][0])
console.log(defaults.tokens[2][1].boomer[0])

我的编译器期望路径的方式是点符号
例如,defaults.tokens[2]
应为defaults.tokens.2
而defaults.tokens[2][0]
应为defaults.tokens.2.0
如果我想访问号码33,我必须传递的路径是defaults.tokens.2.1.boomer.0
而不是defaults.tokens[2][1].boomer[0]
提前致谢!
答案 0 :(得分:0)
你不能用正则表达式做到这一点,因为方括号可能出现在注释,字符串文字中,甚至除了对象属性引用之外,甚至用于数组文字。
我看到你在评论中澄清了这个问题。
您似乎想要接受JavaScript代码并用虚线访问替换括号内的属性访问。这是怎么做的。
获取Esprima并使用它来解析您的JavaScript代码。这将为您提供JavaScript的抽象语法树。导航该树,以您调用的语言输出文本。大多数事情都会不受影响,但每当你看到属性访问时,你都会写出点缀的符号。
但要注意!这个过程听起来像个糟糕的主意!
如果你的JavaScript看起来像这样怎么办?
myObject["x; eraseMyData();"]
它会变成
myObject.x; eraseMyData();
我想你可能想放弃这个项目。 JavaScript使用括号表示法是有充分理由的!