2017-05-16 22 views
0

大きな.jsファイルがあり、値で定義されたすべての変数を取得したいと考えています。私はPHPからこれをやりたがっています(もしJSなら簡単でしょう)。JavaScript文字列からすべての変数名と値を取得/取得する

ので、例えば、私はこのコードを持っている:

  1. 値を持つ変数 "VAR1": "VaRの値が"
  2. 変数

    var var1="var value"; 
    var var2={ 
        something:'value' 
    }; 
    window.var3 = 80+100 
    ;var4='another var value'; 
    

    を私はこのようなリストを取得する必要があります変数:var3;値:{something: 'value'}

  3. 変数 "var3"値:80 + 100
  4. 値 "var4" var value '

私はregexを使ってこれをしようとしていましたが、すべてをキャプチャする正規表現が見つかりませんでした。ここで

は、私が遭遇したいくつかの問題があります:

  1. 行はせずに終了することができます。
  2. 実際の値に含めることができます。ここで
  3. 値(例えばvar variable1;)がない可能性があり

は私が作った正規表現です:

/(?:var[\s]+|window\.){0,1}([^;\s]*)(?:\s*)=(?:\s*)([^;]*)(?:\s*);{0,1}/i 

誰もが異なるアプローチを持っていますか?または、より良い正規表現ですか?

私もJSを解釈PHPのLIBを使用して考えていた:J4P5またはV8js

おかげ

+0

jsスクリプトから正規表現を使って変数とその値を抽出することは不可能に近いです。コメント、文字列、リテラル正規表現*(ネストされたカッコ)です。あなたはパーサなしでそれをすることはできません。 –

答えて

1

が本当にあなたは間違いなくJSパーサーを使用する必要がありますすべての変数の内容をキャプチャ確かに、実行そのコードを解析し、パーサから完全な可変コンテキストを出力します。最後に、あなたもこのようなものを持つことができます:

var whatever = (function() { return 4; })(); 

これは完全に有効なJavaScriptで、起きた後、ちょうどリターンよりも通常より複雑である可能性があります。

コードを実行すると、ユーザーが提供するコードであれば安全性の問題が発生します。たとえば、外部リソースへの呼び出しを簡単にコードに組み込むことができます。だからここで特別な注意が必要です。

+0

私は一時的な正規表現の解決策をとることに決めました。それはすでに100%働いていませんが、私のニーズには十分です。将来、パーサーに切り替える必要があります – heXer

関連する問題