URLEncode变量从字符串解析到数组as3
好吧!我有一个flashVar变量进入Flash,它的URL已经编码,但我已经解码了它。我的问题是我想要将一组变量推入数组中。URLEncode变量从字符串解析到数组as3
假设变量是
“& text0 =输入文字...... & size0 = 18 & FONT0 =宋体& COLOR0 = 0 & rotation0 = 0 & Y0 = 360 & X0 = 640 &的text1 =输入 文本... &尺寸1 = 18 & font1 = Arial字体& COLOR1 = 0 & rotation1 = 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 = ...........
我想一定是有办法做到这一点。很可能我正在考虑正则表达式,但在正则表达式方面我很不好。请一定帮助非常非常感谢。
谢谢!
您不必到您的查询字符串解码,只需使用URLVariables对象 - 它会做所有的解码你。然后遍历它的动态属性来创建你的数组。使用正则表达式在你的变量键结束查找索引号:
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编码,并以变量键开头)。
你可以使用字符串拆分方法来这样的事情;
var astrKeyValue: Array = url.Split("&");
这样
在astrKeyValue
每个值是字符串键值(例如font1=Arial
) 后可能比你的每个项目与“=”分开,会得到对键和值(键 - font1和价值 - 宋体) 所以这段代码,也许会为你工作
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...
你应该看看URLVariables类 - 它可能一段时间节省你的未来。另外:OP想要将这些值解析为一个索引数组 - “text0”是不够的。你应该更仔细地阅读这些问题。 – weltraumpirat 2012-02-16 09:24:03
下面是我为你解决,
//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;
}
伙计,我不允许使用“|”分隔符。 – 2012-02-16 17:19:55
这是这个例子中最大的问题。要将字符串拆分为数组而没有分隔符来分割它,@ weltraumpirat的函数可以工作。感谢您花时间提供帮助。 – 2012-02-16 18:05:41
谢谢@weltraumpirat,它像一个魅力。 – 2012-02-16 18:00:10