文字列パラメータを受け取り、その中の変数参照(隣接する%で指定)を対応する変数値に置き換える関数を作成します。私は十分にeval()関数のリスクについて警告されていますが、代替手段が見つかりませんでした。私はこのコードがどれほど危険であるかわからない。それが問題であれば、どんなアプローチがより安全になるでしょう。ここでJS文字列の変数参照を変数の内容に置き換えます。
は私が持っているものである:MHソウザの勧告に基づいて
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
}
、私はこれは動作するはずです考え出しが、出力は次のとおりです。
%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
}
[テンプレートリテラル](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)を使用できないような制約がありますか? –
これまでにそれらを使用したことがなく、実装方法がわからないこと以外は、私は拘束を受けません。 – cycle4passion