一意の形式(ただし一貫性があります)の文字列が渡されます。これを解析して、その一部を変更してから元に戻し、文字列として返すことができるようにする必要があります。
これが渡される文字列imです。内容は定期的に変更されますが、各アイテムの構造は変わりません。
View
{
Name: View1;
Image
{
BackgroundImage: Image.gif;
Position: 0, 0;
Width: 320;
Height: 480;
}
Button
{
BackgroundImage: Button.gif;
Transition: View2;
Position: 49, 80;
Width: 216;
Height: 71;
}
Button
{
BackgroundImage: Button2.gif;
Position: 65, 217;
Width: 188;
Height: 134;
}
Label
{
Position: 106, 91;
Width: 96;
Height: 34;
Text: "Button";
FontSize: 32;
Color: 0.12549, 0.298039, 0.364706, 1;
}
Scroll
{
Position: 106, 91;
Width: 96;
Height: 34;
Button{
BackgroundImage: Button2.gif;
Position: 65, 217;
Width: 188;
Height: 134;
}
Button{
BackgroundImage: Button2.gif;
Position: 65, 217;
Width: 188;
Height: 134;
}
}
}
各k、vを探し出し、それを適切なオブジェクトまたはJSONファイルに入れて変更できるようにする再帰関数が必要だと思います。私が得た最も遠いのは、単一のレベルを解析して、それをk、vオブジェクトに入れることができることです。これがコードとそれが解析する文字列です。
コードで機能するように文字列を変更しました(シングルレベルの深さ。View{}とScroll {}を削除しました):
var content='Image{BackgroundImage: Image.gif;Position: 0, 0;Width: 320;Height: 480;}Image{BackgroundImage: Image2.gif;Position: 0, 0;Width: 320;Height: 480;}Button{BackgroundImage: Button.gif;Position: 49, 80;Width: 216;Height: 71;}Button{BackgroundImage: Button.gif;Position: 49, 80;Width: 216;Height: 71;}Button{BackgroundImage: Button2.gif;Transition: View2;Position: 65, 217;Width: 188;Height: 134;}Button{BackgroundImage: Button3.gif;Transition: View2;Position: 65, 217;Width: 188;Height: 134;}Label{Position: 106, 91;Width: 96;Height: 34;Text: "Button";FontSize: 32;Color: 0.12549, 0.298039, 0.364706, 1;}Label{Position: 106, 91;Width: 96;Height: 34;Text: "Button";FontSize: 32;Color: 0.12549, 0.298039, 0.364706, 1;}';
var result = content.split('}');
result.pop();// removing the last empty element
var obj = {Controls:{}};
function nextProp(key) {
/*if(obj.Controls.hasOwnProperty(key)) {
var num = key.match(/\d+$/);
if (num) {
return nextProp(key.replace(num[0], '') + (parseInt(num[0], 10) + 1));
} else {
return nextProp(key + '1');
}
}*/
return key;
}
for (var i = 0; i < result.length; i++) {
var key = result[i].split('{');
var value = result[i].replace(key[0], '') + '}';
obj.Controls[nextProp(key[0])] = value;
}
var initObjectList = '<div id="prePop">';
$.each(obj.Controls, function (k, v) {
initObjectList += '<div class="inLineObjects">' + '<div class="key">' + k + '</div><br/>' + '<div class="value">' + v + '</div>' +'</div>';
});
initObjectList += '</div>';
$('#code').append(initObjectList)
戻り値:
{
"Controls": {
"Image": "{BackgroundImage: Image.gif;Position: 0, 0;Width: 320;Height: 480;}",
"Image1": "{BackgroundImage: Image2.gif;Position: 0, 0;Width: 320;Height: 480;}",
"Button": "{BackgroundImage: Button.gif;Position: 49, 80;Width: 216;Height: 71;}",
"Button1": "{BackgroundImage: Button2.gif;Transition: View2;Position: 65, 217;Width: 188;Height: 134;}",
"Button2": "{BackgroundImage: Button3.gif;Transition: View2;Position: 65, 217;Width: 188;Height: 134;}",
"Label": "{Position: 106, 91;Width: 96;Height: 34;Text: \"Button\";FontSize: 32;Color: 0.12549, 0.298039, 0.364706, 1;}",
"Label1": "{Position: 106, 91;Width: 96;Height: 34;Text: \"Button\";FontSize: 32;Color: 0.12549, 0.298039, 0.364706, 1;}"
}
}
私の問題は、上記ではa)ができないことです。{}はすべて値であり、b)であるため、すべてをターゲットにします。複数のレベル、つまり[表示]>[ボタン]>[スクロールビュー]を処理する再帰機能はありません。
これに関する助けをいただければ幸いです。