2017-09-20 13 views
-1

ドット表記(配列を含む)のみを取り込むコンパイラを使っています。例えば、以下の目的のために:正規表現をドット表記で置き換える正規表現 - JavaScript

var defaults = { 
 
    'background-color': '#000', 
 
    color: '#fff', 
 
    tokens: [{token: '3der3ergfg44effg'},{token: '3dertkyohlhjeffg'},[ 
 
      {tokenNest: 'sgvchjjd3fe5yd522s'}, 
 
      {boomer: [33]}]] 
 
    }; 
 

 
    console.log(defaults.tokens[2]) 
 
    console.log(defaults.tokens[2][0]) 
 
    console.log(defaults.tokens[2][1].boomer[0])

方法は私のコンパイラが期待パスは、ドット表記法である

例えばdefaults.tokens[2]ためdefaults.tokens.2あるべきであり、defaults.tokens[2][0]あるべきdefaults.tokens.2.0

番号33にアクセスしたい場合、私が渡さなければならないパスはの代わりにdefaults.tokens.2.1.boomer.0です

ありがとうございます!

+0

"私は、ドット表記(配列を含む)だけを取るコンパイラで作業しています。" - だから** JavaScriptコンパイラではありません。なぜこのタグが付いているのですか?(tag:javascript) – Quentin

+1

あなたがこれまでに試したことを投稿してください。 – Strikegently

+0

Ehh ...ブラケット記法にドット表記を置き換える正規表現が必要なのではないですか? – Teemu

答えて

0

大括弧はコメント、文字列リテラルに現れることがあり、オブジェクトプロパティの参照に加えて配列リテラルにも使用されるため、これを正規表現で行うことはできません。

私はあなたがコメントで質問を明確にしたのを見る。

JavaScriptコードを取り込み、括弧で囲まれたプロパティへのアクセスを点線のアクセスに置き換えると思われます。ここでそれを行う方法です。

Esprimaを取得し、JavaScriptコードを解析するために使用します。これはJavaScript用の抽象構文ツリーを提供します。そのツリーをナビゲートして、あなたの言語が何であれ、テキストを出力します。大部分はすべて変更されませんが、プロパティへのアクセスが表示されたときはいつでも、点線の表記を書きます。

しかし注意してください!このプロセスは恐ろしいアイデアのように聞こえる!

JavaScriptがこのように見える場合はどうなりますか?

myObject["x; eraseMyData();"] 

それは私はあなたがこのプロジェクトを放棄したいかもしれないと思う

myObject.x; eraseMyData(); 

に変わるでしょう。 JavaScriptは非常に良い理由のために括弧書き表記を使用しています!

+0

入力いただきありがとうございます – FooBar144