从JS函数中获取函数参数,该函数是一个字符串

时间:2016-04-27 22:59:59

标签: javascript function parsing parameters

我正在解析一个网页,我将以下JS函数作为字符串

获取
"translate(737.4170532226562,136.14541625976562)" 

我想解析字符串以获取函数的两个参数。

我可以将字符串解析为'('和','和')'来获取参数 - 我想知道是否有其他方法可以从这个字符串函数中获取参数。

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来实现此目的。例如,这一个:/([\d\.]+),([\d\.]+)/

var str = "translate(737.4170532226562,136.14541625976562)";
var args = /([\d\.]+),([\d\.]+)/.exec(str)
var a1 = args[1], a2 = args[2];

document.write(['First argument: ', a1, '<br> Second argument: ', a2].join(''))

答案 1 :(得分:0)

这可能有点矫枉过正。但我很无聊。所以这是一个函数名解析器。它获取函数名称和参数。

var program = "translate(737.4170532226562,136.14541625976562)";

function Parser(s)
{
  this.text = s;
  this.length = s.length;
  this.position = 0;
  this.look = '0'
  this.next();
}
Parser.prototype.isName = function() {
    return this.look <= 'z' && this.look >= 'a' || this.look <= '9' && this.look >= '0' || this.look == '.'    
}
Parser.prototype.next = function() {
    this.look = this.text[this.position++];
}
Parser.prototype.getName = function() {
  var name = "";
  while(parser.isName()) {
    name += parser.look;
    parser.next();
  }
  return name;
}

var parser = new Parser(program);
var fname = parser.getName();
var args = [];

if(parser.look == '(') {
  parser.next();
    args.push(parser.getName());
    while(parser.look == ',') {
        parser.next();
        args.push(parser.getName());
    }
} else {
    throw new Error("name must be followed by ()")
}

console.log(fname, args);