Javascript 从JS函数(字符串)获取函数参数
我正在解析一个网页,并获得以下JS函数作为字符串Javascript 从JS函数(字符串)获取函数参数,javascript,function,parsing,parameters,Javascript,Function,Parsing,Parameters,我正在解析一个网页,并获得以下JS函数作为字符串 "translate(737.4170532226562,136.14541625976562)" 我想解析字符串以获得函数的两个参数 我可以将字符串解析到“(”和“,”和“)”以获取参数-我想知道是否有其他方法可以从这个字符串函数获取参数。这可能有些过分。但是我很无聊。这是一个函数名解析器。它获取函数名和参数 var program = "translate(737.4170532226562,136.14541625976562)";
"translate(737.4170532226562,136.14541625976562)"
我想解析字符串以获得函数的两个参数
我可以将字符串解析到“(”和“,”和“)”以获取参数-我想知道是否有其他方法可以从这个字符串函数获取参数。这可能有些过分。但是我很无聊。这是一个函数名解析器。它获取函数名和参数
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);
var program=“translate(737.4170532226562136.1454162597662)”;
函数分析器
{
this.text=s;
此长度=s长度;
这个位置=0;
this.look='0'
这个。下一个();
}
Parser.prototype.isName=函数(){
返回this.look='a'| | this.look='0'| | this.look='
}
Parser.prototype.next=函数(){
this.look=this.text[this.position++];
}
Parser.prototype.getName=函数(){
var name=“”;
while(parser.isName()){
name+=parser.look;
parser.next();
}
返回名称;
}
var parser=新的解析器(程序);
var fname=parser.getName();
var args=[];
if(parser.look=='('){
parser.next();
push(parser.getName());
而(parser.look==','){
parser.next();
push(parser.getName());
}
}否则{
抛出新错误(“名称后面必须跟()”)
}
console.log(fname,args);
您可以使用正则表达式来实现此目的。例如,这个:/([\d\.]+),([\d\.]+)/
var str=“translate(737.4170532226562136.14541625976562)”;
变量args=/([\d\.]+),([\d\.]+)/.exec(str)
变量a1=args[1],a2=args[2];
document.write(['First argument:',a1',
Second argument:',a2.).join('')
这在语法中称为产生式,所以希望每次解析时都是这样。使用类似于/translate\([0-9\.]+),([0-9\.]\)/
的正则表达式。或者您可以进行翻译(a,b)
函数和eval
字符串,当然,如果你相信源代码的话。嘿@Dinesh看看我的答案,让我知道你的想法。谢谢你的快速回答。我想知道我们是否可以有一个更小更紧凑的解决方案。看看angular源代码,看看他们提取变量名的正则表达式,但是乞丐不应该是挑肥拣瘦的:)