【发布时间】:2014-03-24 17:23:33
【问题描述】:
假设我有一个像这样的字符串形式的 JavaScript 表达式:
string = ' collections.users[ currentUsers[ ids[1].id ] ] && users[ ids[1].id ]'
现在我需要得到这个表达式的某些部分,它们是我正在做的“依赖”。
这是我需要从该字符串中提取的内容
result = [
'collections.users[ currentUsers[ ids[1].id ] ]',
'currentUsers[ ids[1].id]', 'ids[1].id',
'users[ ids[1].id ]', 'ids[1].id'
]
它基本上需要每个包含[*] 的“变量”
这是可能导致表达式改变的每个变量,我已经尝试这样做大约 3 天了,到目前为止我尝试过但失败的是
-
使用正则表达式查找所有依赖项(失败)
-
我曾尝试将字符串拆分为“如果括号打开做某事”之类的使用条件,但失败了。
这真的很难弄清楚,我没有在代码中尝试过任何东西,因为我刚刚删除并重新开始。
我知道这可能有点“本地化”,但我已经在 JavaScript 聊天中询问了几天的建议,但没有得到任何建议,我别无选择。
任何人对如何实现这一点有任何建议,请记住这个字符串不是静态的并且可能有更深层次的条件?
有人为此建议使用 JSON,但我不知道它会如何工作,你怎么看?
由于问题的性质,我会给 50+ 赏金最佳答案/建议
【问题讨论】:
-
我建议看看一个合适的 JS 语法解析器,比如esprima.org。
-
@FelixKling 好的,我一直在思考编译器的问题,但是对于这样的事情会不会太过分了?我现在会研究一下,谢谢
-
视情况而定。它肯定会工作:) 您可以在此处复制字符串的内容esprima.org/demo/parse.html 并查看 AST esprima 是否会返回,然后决定是否可以使用。这可能是最可靠的解决方案。
-
好的,干杯@FelixKling
-
哈,演示页面甚至可以让我创建一个唯一的 URL,所以仅供参考,这里是 esprima 将为上面的代码创建的 AST:esprima.org/demo/…
标签: javascript regex expression conditional-statements