【发布时间】:2022-01-05 08:17:23
【问题描述】:
我想将用 VisualBasic 样式编写的表达式(条件)翻译成 JavaScript 代码。因为我还没有找到这样做的图书馆,所以我必须自己做。或者有人知道我可以使用的项目吗?
我的要求:
我从一个文件中得到一个字符串,其中包含用 VB 编写的表达式。它不是完整的 VB 代码,而只是单个 VB 函数,如 IF、TRIM、LEFT 等,以及一些其他函数,如 RECORD_NR()(我认为这不是 vb 的原生函数)。
我现在想把这个字符串翻译成 JavaScript(也可以作为一个字符串来,因为我后来把 JavaScript 代码写到一个文件中)。
问题之一是不能对引号中的所有字符进行功能处理。
示例表达式:
IF(RECORD_NR() = 1, "NR,1",IF(RECORD_NR() = 2, "NR,2", "NR3"))
可能的结果:
var result = "";
if(record.index == 1){
result = "NR,1";
} else {
if(record.index == 2){
result = "NR,2";
} else {
result = "NR3";
}
}
以下是我目前正在使用的方法,我不确定它是否能让我达到我的目标:
- 搜索引号中的区域并将位置信息(开始和结束)存储在 json 对象 (
jsonQuotes) 中。 - 在括号中搜索范围并将位置(开始和结束)保存在 json 对象 (
jsonBrackets) 中。在这里,我将根据jsonQuotes排除引号中的范围。 - 搜索不在引号中的关键字(函数名)并将找到的关键字添加到json对象
jsonBrackets(这样我就知道哪个函数属于括号区域了)。
此时我有以下 json 对象:
[
{
"ID": 1,
"start": 2,
"end": 60,
"fnc": "IF"
},
{
"ID": 2,
"start": 12,
"end": 13,
"fnc": "RECORD_NR"
},
{
"ID": 3,
"start": 29,
"end": 59,
"fnc": "IF"
},
{
"ID": 4,
"start": 39,
"end": 40,
"fnc": "RECORD_NR"
}
]
现在我很挣扎。我想对 json 对象进行排序或嵌套:
[
{
"ID": 1,
"start": 2,
"end": 60,
"fnc": "IF",
"contains":[
{
"ID": 2,
"start": 12,
"end": 13,
"fnc": "RECORD_NR",
"contains":[]
},
{
"ID": 3,
"start": 29,
"end": 59,
"fnc": "IF",
"contains":[
{
"ID": 4,
"start": 39,
"end": 40,
"fnc": "RECORD_NR",
"contains":[]
}
]
}
]
}
]
有人可以帮助我实现这一目标吗?或者有谁知道更好的方法来获得预期的结果(也许是一种不同的更好的方法)?
【问题讨论】:
-
你需要做多少?或者它是一个持续的任务?如果它只是一个相对较小的#你必须做一次(可能几十个),我会用手做。
-
我可能会尝试使用正则表达式来做到这一点。每种输入格式一个正则表达式,类似这样。
-
这是一项持续的任务,vb 表达式可能非常简单或复杂(例如许多嵌套的 if)。我更喜欢正则表达式解决方案,但我不具备使其工作所需的正则表达式技能。
标签: javascript json vb6