2016-04-27 1 views
1

ich eine Webseite bin Parsen und ich erhalte die folgende JS Funktion als StringGet-Funktion Parameter aus einer JS-Funktion, die eine Zeichenfolge ist

"translate(737.4170532226562,136.14541625976562)" 

ich die Zeichenfolge analysieren will die beiden Parameter der Funktion zu erhalten .

Ich kann die Zeichenfolge bis zum '(' und ',' und ')' analysieren, um die Argumente zu erhalten - Ich wollte wissen, ob es andere Methoden gibt, um die Parameter von dieser String-Funktion zu erhalten.

+0

dies ist eine Produktion in einer Grammatik genannt, so hoffentlich das ist, was es wie jedes Mal schauen, werden Sie analysieren. –

+0

Verwenden Sie eine Regex wie '/ translate \ (([0-9 \.] +), ([0-9 \.]) \) /'. Oder Sie könnten eine 'translate (a, b)' -Funktion machen und die Zeichenfolge 'eval' machen, wenn Sie der Quelle vertrauen. – Gabriel

+0

hey @Dinesh werfen Sie einen Blick auf meine Antwort und lassen Sie mich wissen, was Sie denken. –

Antwort

1

Sie können Regex für diesen Zweck verwenden. Zum Beispiel diese: /([\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(''))

0

Dies kann Overkill sein. Aber ich war gelangweilt. Also hier ist ein Funktionsnamen Parser. Es erhält den Funktionsnamen und die Argumente.

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); 
+0

Danke für die schnelle Antwort. Ich habe mich gefragt, ob wir eine kleinere und kompaktere Lösung haben können. – Dinesh

+1

Werfen Sie einen Blick auf den eckigen Quellcode und schauen Sie sich deren Regex an, um Variablennamen zu extrahieren, aber Bettler sollten keine Wähler sein :) –