JSFiddler: http: //jsfiddle.net/A3vg6/20/
var regex = /(?:window|scope|data|owner)(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*/gi;
var path = [];
var vars = [];
var ms = txt.replace(regex,
function (match) {
var nv = "v" + (path.length + 1);
if (match.indexOf("owner.")==0) {
match = match.substr(6);
}
path.push(match);
vars.push(nv);
return nv;
}
);
出力を取得しています
data.x + data.y + $data.z + xdata => v1 + v2 + $v3 + xv4
しかし、正しい出力は、
data.x + data.y + $data.z + xdata => v1 + v2 + data.z + xdata
したがって、$で始まるものはすべてエスケープする必要があります。また、文字の後にデータが表示される場合は、置き換えないでください。キーワードは、window、scope、data、ownerの4つだけです。これらの単語は、変数に置き換える必要があります。
正規表現は嫌いですが、複雑なシーケンスが含まれるため、正規表現にする必要があります。
data[ Calculate( x, data.y)] => v1[ Calculate(x,v2)]
現在はほとんど成功していませんが、新しいシーケンスに問題があります
data[data['x']] + data.x + data.y + $data.y + xdata
になる
v1v2['x']] +v3 +v4 + data.y + xdata
しかし、それは
v1[v2['x']] +v3 +v4 + data.y + xdata
回答:
正しく動作します。