Переменная URLEncode Разбор из строки в массив as3 - PullRequest
1 голос
/ 16 февраля 2012

Хорошо!У меня есть переменная flashVar, которая входит во Flash, ее URL-адрес закодирован, но я уже расшифровала ее.Моя проблема в том, что я хочу, чтобы набор переменных был помещен в массив.

Допустим, переменные

"& text0 = Введите текст ... & size0 = 18 & font0 = Arial & color0 =0 & вращение0 = 0 & y0 = 360 & x0 = 640 & text1 = введите текст ... & size1 = 18 & font1 = Arial & color1 = 0 & вращение1 = 0 & y1 = 360 & x1 = 640 "

и т. Д.хочу, чтобы переменные входили в массив вроде

myArray[0].text = Enter Text...
myArray[0].size = 18]
myArray[0].font = Arial
myArray[0].color = 0
myArray[0].rotation = 0
myArray[0].y = 360
myArray[0].x = 640
myArray[1].text = ...........
.............................
.............................
myArray[n].text = ...........

Я думаю, что должен быть какой-то способ сделать это.Скорее всего, я думаю о регулярном выражении, но я довольно плохо разбираюсь в регулярном выражении.Пожалуйста, некоторая помощь будет очень очень признательна.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 16 февраля 2012

Вам не нужно декодировать строку запроса, просто используйте объект URLVariables - он сделает все за вас.Затем переберите его динамические свойства, чтобы создать свой массив.Используйте RegExp, чтобы найти индексные числа в конце ваших переменных ключей:

function parseURLVariables( query:String ) : Array {
    var vars:URLVariables = new URLVariables (query);
    var arr:Array = [];
    for (var key : String in vars) {
        var splitIndex : int = key.search(/[0-9]+$/);
        var name:String = key.substr (0,splitIndex);
        var indexNumber:int = parseInt ( key.substr(splitIndex));
        arr[indexNumber] ||= {};
        arr[indexNumber][name] = vars[key];
    }
    return arr; 
}

Поскольку строка запроса начинается с амперсанда, вам, возможно, придется использовать parseURLVariables ( myString.substr(1)), в противном случае объект URLVariables будет выдаватьошибка, сообщающая о том, что строка запроса недопустима (она должна быть закодирована в URL и начинаться с переменного ключа).

0 голосов
/ 16 февраля 2012

Вот вам решение от меня,

//your string data should be like this, there should be a seperate seperator (i've used pipe sign |) for each element which will be converted to an object and then pushed to the array
var strData:String = "text=Enter Text...&size=18&font=Arial&color=0&rotation=0&y=360&x=640|text=Enter Text...&size=18&font=Arial&color=0&rotation=0&y=360&x=640";

var myArray:Array = new Array();
var _tmpArr:Array = strData.split("|");

//populating the array
for(var i:int=0;i<_tmpArr.length;i++)
{
    myArray.push(strToObj(_tmpArr[i]));
}
trace(myArray.length);

// coverts chunk of string to object with all key and value in it
function strToObj(str:String):Object
{
    var obj:Object = new Object();
    var tmpArr:Array = str.split('&');

    for (var i:int = 0; i < tmpArr.length; i++)
    {
        var _arr:Array = String(tmpArr[i]).split('=');
        var key:String = String(_arr[0]);
        var val:String = String(_arr[1]);
        obj[key] = val;
        trace(key+" = "+val);
    }
    trace("----");
    return obj;
}
0 голосов
/ 16 февраля 2012

вы можете использовать метод разбиения строки на что-то вроде этого;

var astrKeyValue: Array = url.Split( "&" );

таким образом, каждое значение в astrKeyValue является строковым значением ключа (например, font1=Arial) после того, как вы можете разделить каждый элементс "=" и получит пару ключ и значение (для ключа - font1 и для значения - arial), поэтому этот код, возможно, будет работать для вас

var str = "text0=Enter Text...&size0=18&font0=Arial&color0=0&rotation0=0&y0=360&x0=640&text1=Enter Text...&size1=18&font1=Arial&color1=0&rotation1=0&y1=360&x1=640"
var a : Array = str.split( "&" );
var newArr: Array = new Array()
for each ( var str1 in a )
{
    var t: Array = str1.split( "=" );
    newArr[ t[0] ] = t[1];
}

trace( newArr.text0 ) // -> Enter Text...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...