AS3自定义字符串公式解析器

时间:2014-08-05 18:04:34

标签: actionscript-3 flex air

我的目标是创建某种Parser来解析字符串公式,类似于Excel公式。 公式字符串示例(条形码示例) -

"CONCAT('98', ZEROFILL([productNumber],5,'0'), ZEROFILL(EQUATION([weightKG]*1000),5,'0'))"

其中
'98' - 字符串 [productNumber][weightKG] - 是可以更改的变量
CONCATZEROFILLEQUATION是班级

中存在的方法

对于包含变量[productNumber] = '1'[weightKG] = 0.1的公式,结果必须为

'980000100100' 

问题是如何将整个字符串拆分/解析为零件并检测方法,变量和字符串值?
在我打字的时候,另一个想法就是以XML格式存储整个公式 谢谢。

1 个答案:

答案 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.
}