AS3和HTML5 - 使用正则表达式将字符串解析为数组

时间:2013-10-03 20:16:12

标签: regex html5 actionscript-3 substring

我一直在寻找并使用RegEx一段时间,并且我正在尝试找到可以应用于AS3和HTML5的解决方案。

我有一个自定义用户输入部分,256个可以自定义的字符。

我希望他们使用我预定义的代码表00 - 99,他们可以将它们插入到框中以自动生成一个可以通过几百个示例的响应。

这是一个简单的例子:

Please call: 04
And ask for help for product ID:
03

我可以接受并说,好吧,我把以下内容放到了数组中:

[Please call: ]
[04]
[/n]
[And ask for help for product ID: ]
[/n]
[03]

并且可能应用一个标志来说明这是否是数据库条目

[Please call: ][false]
[04][true]
[/n][false]
[And ask for help for product ID: ][false]
[/n][false]
[03][true]

这将是我的程序可以阅读的内容。我知道对于##匹配,找到一个数据库条目并插入,但除此之外,使用字符串。

我一直在玩 http://gskinner.com/RegExr/

到目前为止,试图强行解决无济于事的问题。

非常感谢任何帮助。

到目前为止,我为比赛提出的最好成绩如下。虽然这是我第一次使用正则表达式函数,但需要找出如何将这些条目推送到我的有序数组中。

\d\d
\D+

并且需要一些方法将它们组合起来以拉出一个数组...或者我会陷入一个糟糕的循环:

//AS3 example
database_line_item:int = 127;
previous_value_was_int:boolean = false;
_display_text:string = "";
for(var i:int = 0; i < string.length; i++){
    if(string.charAt(i) is int){
        if(previous_value_was_in){
            previous_value_was_int = true;
        }else{
            _display_text += getDatabaseValue(string.charAt(i-1)+string.charAt(i), database_line_item);
            previous_value_was_int = false;
        }
    }else{
        //Hopefully this handles carriage returns, if not, will have to add that in.
        _display_text += string.charAt(i);
    }
}
// >>>>>>>>> HTML5 Example <<<<<<<<<<<<<
    ...

我会循环访问database_line_item,但对于大约400个订单项,这将是一个很小的问题,要经过这个字符串。将它拆分成更小的数组会更容易处理。

1 个答案:

答案 0 :(得分:1)

这是神奇的注册:/([^0-9\n\r]+)|(\d+)|(\r\n?|\n)/gi

例句输出:

[Please call: ][false]
[4][true]
[/n][false]
[And ask for help for product ID:][false]
[/n][false]
[3][true]

执行作业的代码并将数据放入数组中:

package
{
    import flash.display.Sprite;

    public class TestReg extends Sprite
    {
        public function TestReg()
        {
            super();
            var data : Array = parse("Please call: 04\n"+
                        "And ask for help for product ID:\n"+
                        "03");

            // Output
            for(var i : uint = 0; i < data.length; i += 2)
                trace("[" + data[ i ] + "][" + data[ i + 1 ] + "]");
        }

        private var _search : RegExp = /([^0-9\n\r]+)|(\d+)|(\r\n?|\n)/gi;
        public function parse(str : String) : Array
        {
            var result : Array = [];
            var data : Array = str.match( _search );
            for each(var item : * in data)
            {
                // Replace new line by /n
                if(item.charAt( 0 ) == "\n" || item.charAt( 0 ) == "\r")
                    item = "/n";

                // Convert to int if is a number
                if( ! isNaN( parseFloat( item.charAt( 0 ) ) ) )
                    item = parseInt( item );

                result.push( item );
                result.push( !( item is String ));
            }

            return result;
        }
    }
}