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 に答える