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
}
Haben Sie Beschränkungen, die Sie daran hindern, [Vorlagenliterale] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) zu verwenden? –
Anders als nie zuvor zu verwenden und nicht ganz zu wissen, wie man es implementiert, ich keine Zwänge. – cycle4passion