1

AC2でSplitを使用してプロジェクトを作成しようとしています。

これは私が持っています

    in_pers = 3x5+5x3+6x8;

var tmp:Array = in_pers.split("+");

trace(tmp);  //output ==  3x5, 5x3, 6x8 

しかし、in_pers = 3x5+5x3-6x8-4x2の場合はどうでしょうか。

どうすれば3x5、5x3、6x8、4x2の結果を得ることができますか

2つの区切り文字で分割を使用する方法。

宜しくお願いします..

4

4 に答える 4

2

wikiupが提案したことを行うためのはるかに簡単な方法があります:

function strReplace( haystack:String, needle:String, replacement:String ):String
{
    var tmpA:Array = haystack.split( needle );
    return tmpA.join( replacement );
}

function multiSplit( haystack:String, needles:Array ):Array
{
    // generate a unique String for concatenation.
    var salt:String = String( Math.random() ); //replace with anything you like

    // Replace all of the strings in the needles array with the salt variable
    for( var i:Number = 0; i < needles.length; i++ )
    {
        haystack = strReplace( haystack, needles[ i ], salt );
    }

    //haystack now only has the objects you want split up concatenated by the salt variable.
    //split haystack and you'll have your desired result.
    return haystack.split( salt );
}

これは小さいだけでなく、高速でもあります(for(i = 0; i <val; i ++)(反復と再帰の比較)よりもはるかに時間がかかります)。

于 2009-05-08T17:49:33.267 に答える
2

私はさらに簡単な方法を知っています:

var in_pers :String = "3x5+5x3-6x8";

var reg :RegExp = new RegExp ( "[+\-]" , "gi" );

trace ( in_pers.split ( reg ) ); // output: 3x5,5x3,6x8

それはトリックを行う必要があります。

秘訣は RegExp クラスを使用することです。魔女は最初は理解するのが少し複雑です。

[+-] は「+」または「-」を意味し、「gi」では g はグローバル (最初のパターンだけでなく、見つかったすべてのパターンに一致) を表し、i は大文字と小文字を区別しないことを表します。

これを読んでいる人の助けになれば幸いです...

于 2011-03-18T14:19:51.357 に答える
1

残念ながら、AS2には正規表現をネイティブに理解していません。RegExpを使用するには、AS3に移動するか、AS2用に記述された正規表現クラスを見つける必要があります...そこにはいくつかあります。

この目的のために、カスタム関数を作成する必要があると思います。以下で作成したものが最高かどうかはわかりません...少しぎこちなく、おそらく最もパフォーマンスが高いとは言えませんが、基本的には必要なことを実行できると思います。

var in_pers:String = "3x5+5x3-6x8-4x2";
var tmp:Array = multiSplit(in_pers, ["+", "-"]);
trace (tmp);

function multiSplit(str:String, delimiters:Array):Array
{
    /* create an array to return */
    var resultArray:Array = [];

    /* loop through the string */
    var a:Number = 0;
    while (a < str.length)
    {
        var first:Number = str.length;
        var bLen:Number = delimiters.length;

            /* loop through the delimiters */
        for (var b:Number = 0; b < bLen; b++)
        {
            var delimiter:String = delimiters[b];

                /* find the first delimiter */
            var index:Number = str.indexOf(delimiter, a + 1);

            if (index != -1 && index < first)
                first = index;
        }
        if (first == a)
            break;
        /* Add the substring to the return array */
        resultArray.push(str.substring(a, first));
        a = first+1;
    }
    return resultArray;
}
于 2009-05-05T20:26:25.247 に答える
0
trace(("3x5+5x3+6x8-6x3-2x8+3x5").split("-").join("+").split("+"));
//output ==  3x5,5x3,6x8,6x3,2x8,3x5
于 2011-06-26T02:55:36.870 に答える