ActionScript2:使用两个分隔符“帮助”拆分文本

时间:2009-05-03 12:14:34

标签: string actionscript-2 split

我尝试使用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

如何使用带有两个分隔符的拆分。

最好的考虑..

4 个答案:

答案 0 :(得分: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 );
}

这不仅更小,而且更快(虽然比(i = 0; i&lt; val; i ++)需要更长的时间(查找迭代与递归))。

答案 1 :(得分: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表示全局(匹配找到的所有模式,而不仅仅是第一个)并且我不区分大小写。

希望它可以帮助任何读这篇文章......

答案 2 :(得分:1)

可悲的是,AS2对正则表达式没有本土的理解。要使用RegExp,您必须转移到AS3,或者找到为AS2编写的正则表达式类...那里有一些。

我认为为此你需要创建一个自定义函数。我不确定我在下面创建的那个是最好的...有点kludgy,也许不是最高效的,但我认为它基本上是你需要的。

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;
}

答案 3 :(得分:0)

trace(("3x5+5x3+6x8-6x3-2x8+3x5").split("-").join("+").split("+"));
//output ==  3x5,5x3,6x8,6x3,2x8,3x5