我正在使用一个仅包含点符号(包括数组)的编译器。例如,对于以下对象:
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]
预先感谢!
您将无法使用正则表达式执行此操作,因为Square Brackets可能会出现在注释,字符串文字中,甚至还用于数组文字,除了对象属性属性引用。<<<<<<<<<<<<<<<<<<<<<<<</p>
我看到您在评论中澄清了这个问题。
看来您想使用JavaScript代码,并用虚线访问替换包围的属性访问。这是如何做的。
获取Esprima并使用它来解析您的JavaScript代码。这将为您提供一个用于JavaScript的抽象语法树。浏览该树,以所谓的语言输出文本。大多数一切都会通过未触及的,但是每当您看到属性访问时,您都会写出一些符号。
但是要当心!这个过程听起来像是一个可怕的主意!
如果您的JavaScript看起来像这样?
myObject["x; eraseMyData();"]
它会变成
myObject.x; eraseMyData();
我认为您可能想放弃这个项目。JavaScript使用括号符号是有充分理由的!