2017-10-28 3 views
0

Ich möchte eine Funktion erstellen, die einen String-Parameter und ersetzt Variablenreferenzen innerhalb (mit flankierenden% s bezeichnet) mit ihren entsprechenden Variablenwerte. Ich wurde ausreichend über das Risiko der eval() - Funktion gewarnt, habe aber keine Alternative gefunden. Ich bin mir nicht sicher, wie riskant dieser Code ist. Wenn es ein Problem ist, welcher Ansatz wäre sicherer. HierJS Replace Variable Verweis in String mit dem Inhalt der Variablen

ist, was ich habe:

var a = 1; 
var b = 2; 
result = myFunction("a is %a%, b is %b%"); 
console.log(result); // return "a is 1, b is 2" 

function myFunction(text) { 
    // escape needed chars in text for regex 
    text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
    var regExp = /%.+?%/g, 
     match; 
    while (match = regExp.exec(text)) { 
     rep = match[0].substr(1).slice(0, -1); // remove flanking %'s 
     text = text.replace(match[0], eval(rep)); 
    } 
    return text 
} 

Basierend auf MH Souza Empfehlung, ich dachte, das sollte funktionieren, aber Ausgang ist:

%a% a 
%b% b 
a is a, b is b 

var a = 1; 
 
var b = 2; 
 
result = myFunction("a is %a%, b is %b%"); 
 
console.log(result); 
 

 
function myFunction(text) { 
 
    // escape neede chars in text for regex 
 
    text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
 
    var regExp = /%.+?%/g, 
 
    match; 
 
    while (match = regExp.exec(text)) { 
 
    var rep = match[0].substr(1).slice(0, -1); // remove flanking %'s 
 
    var rep = `${rep}`; 
 
    console.log(match[0], rep); 
 
    text = text.replace(match[0], rep); 
 
    } 
 
    return text 
 
}

+0

Haben Sie Beschränkungen, die Sie daran hindern, [Vorlagenliterale] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) zu verwenden? –

+0

Anders als nie zuvor zu verwenden und nicht ganz zu wissen, wie man es implementiert, ich keine Zwänge. – cycle4passion

Antwort

3

Sie kann dies erreichen, indem Sie Template Literals verwenden.

In Ihrem Fall:

const a = 1; 
const b = 2; 
const result = `a is ${a}, b is ${b}`; // a is 1, b is 2 

Sie müssen nur Ihre Zeichenfolge wie folgt schreiben: `My string`

und einen variablen Wert verketten, schreiben Sie die Variable wie folgt aus: $ {myVariable}

So ist das Endergebnis würde wie folgt aussehen:

const myVariable = 'awesome'; 
const finalResult = `My string is ${myVariable}` // My string is awesome 
+0

Code oben aktualisiert, immer noch nicht aufgelöst, wie ich es erwarten würde. – cycle4passion

Verwandte Themen