1

我一直在寻找和使用 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个行项目,这将是一个征税,通过那个字符串。将其拆分为更小的数组会更容易处理。

4

1 回答 1

1

这是神奇的 reg :/([^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;
        }
    }
}
于 2013-10-04T07:35:37.767 回答