正则表达式用点表示法替换括号表示法 - JavaScript

时间:2017-09-20 15:36:20

标签: javascript regex

我正在使用只接受点符号(包括数组)的编译器。例如,对于下面的对象:



 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.2defaults.tokens[2][0]应为defaults.tokens.2.0

如果我想访问号码33,我必须传递的路径是defaults.tokens.2.1.boomer.0而不是defaults.tokens[2][1].boomer[0]

提前致谢!

1 个答案:

答案 0 :(得分:0)

你不能用正则表达式做到这一点,因为方括号可能出现在注释,字符串文字中,甚至除了对象属性引用之外,甚至用于数组文字。

我看到你在评论中澄清了这个问题。

您似乎想要接受JavaScript代码并用虚线访问替换括号内的属性访问。这是怎么做的。

获取Esprima并使用它来解析您的JavaScript代码。这将为您提供JavaScript的抽象语法树。导航该树,以您调用的语言输出文本。大多数事情都会不受影响,但每当你看到属性访问时,你都会写出点缀的符号。

但要注意!这个过程听起来像个糟糕的主意!

如果你的JavaScript看起来像这样怎么办?

myObject["x; eraseMyData();"]

它会变成

myObject.x; eraseMyData();

我想你可能想放弃这个项目。 JavaScript使用括号表示法是有充分理由的!