文字列に埋め込まれた関数を検出し、その関数をjavascriptの出力に置き換えることができるparsify()をアップグレードするにはどうすればよいですか?

アルカナディアンアーク

私は2つの関数、すなわちantiString()parsify()を持っており、そのコードを以下に示します。

 function antiString(obj) { 
  return Function('"use strict"; return (' + obj + ')')();
 }; // This is a function I learned about from MDN Documents

 function parsify(str) {
   str = str.replace(/(\r\n|\n|\r)/gm, " ");
   var mat = str.match(/@--func(.*)--@/).pop();
   var anti = antiString(mat);
   var str2 = str.replace(/@--func(.*)--@/, anti);
   return str2;
 };

calc()という名前の非常に単純な関数を考えてみましょう

 function calc(val) {
    return val.toString(); // Just changes the typeof val to string from our input type that will be number.
 }; 

現在の使用法:

 var str = "Value will be @--func calc(3/2) --@";
 console.log( parsify( str ) ); // Value will be 1.5

だから、私の質問は何ですか?parsify()のソースコードでpop()を使用したことがわかるかもしれません!それが私の問題です。定義と同様に、pop()は最後を参照するため、次のようなことをしたいときはいつでも:

 var str = "I am @--func calc(4+1) --@, who is @--func calc(2-1) --@ added to @--func calc(16/4) --@";
 console.log( parsify( str ) );
 // Expected Output : I am 5, who is 1 added to 4
// Actual Output : Nothing !!!!!!!

だから、私は自分のSoをアップグレードしたいので、上記の例で期待される出力として出力を生成できるように、parsify()関数をアップグレードしたいと思います。誰かがこれを達成するために何を変更するかを教えてもらえますか?

前もって感謝します

ニーナ・ショルツ

検索部分を置き換える関数を使用し、貪欲でない?数量詞を使用して、可能な限り短い検索文字列のみを取得することができます。

ところで、;機能ブロックの最後に必要はありませんこれは、関数式を使用することで必要になる可能性があります

function antiString(obj) {
    return Function('"use strict"; return (' + obj + ')')();
}

function parsify(str) {
    return str
        .replace(/(\r\n|\n|\r)/gm, " ")
        .replace(/@--func(.*?)--@/g, (_, mat) => antiString(mat));
}

function calc(val) {
    return val.toString();
}

var str = "I am @--func calc(4+1) --@, who is @--func calc(2-1) --@ added to @--func calc(16/4) --@";

console.log(parsify(str));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ