我的目标是创建某种Parser来解析字符串公式,类似于Excel公式。
公式字符串示例(条形码示例) -
"CONCAT('98', ZEROFILL([productNumber],5,'0'), ZEROFILL(EQUATION([weightKG]*1000),5,'0'))"
其中
'98'
- 字符串
[productNumber]
和[weightKG]
- 是可以更改的变量
CONCAT
,ZEROFILL
和EQUATION
是班级
对于包含变量[productNumber] = '1'
和[weightKG] = 0.1
的公式,结果必须为
'980000100100'
问题是如何将整个字符串拆分/解析为零件并检测方法,变量和字符串值?
在我打字的时候,另一个想法就是以XML格式存储整个公式
谢谢。
答案 0 :(得分:2)
您可以使用String.split()获取一系列子字符串。
但是,使用您的示例,调用split(",")将为您提供以下数组:
[0]=CONCAT('98'
[1]= ZEROFILL([productNumber]
[2]=5
[3]='0')
[4]= ZEROFILL(EQUATION([weightKG]*1000)
[5]=5
[6]='0'))
这似乎对您的项目非常有帮助。相反,您可能会考虑使用一些逻辑创建一个parse()函数来查找有用的子字符串:
function parse(input:String):Array {
var firstParen:int = input.indexOf("(");
var lastParen:int = input.lastIndexOf(")");
var formulaName:String = input.substring(0, firstParen);
var arguments:String = input.substring(firstParen, lastParen);
var argumentList:Array = parseArgs(arguments);
var result:Array = new Array();
result.push(formulaName);
//Recursively call parse() on the argumentList
foreach (var elem:* in argumentList) {
result.push(elem); //Could be string or array.
}
}
function parseArgs(input:String):Array {
// Look for commas that aren't enclosed inside parenthesis and
// construct an array of substrings based on that.
//A regex may be helpful here, but the implementation is left
//as an exercise for the reader.
}