与蒙版文本一样,如何使用文本填充占位符,并删除文本以返回占位符?

时间:2012-07-14 20:00:47

标签: regex actionscript-3 replace

我希望能够合并两个(可能是三个)字符串,如下所示。这可能使用正则表达式吗? (我使用的基本语言是Actionscript 3.0,但我可以使用更通用的正则表达式解决方案。)

这个想法是XYZ(非短划线)字符固定到位,根据需要用短字替换新字符。添加任何添加内容,就好像一个跳过固定字符的堆栈一样。我想使用第三个字符串:---XYZ---来维护占位符。

重新评论

屏蔽文本输入是我正在寻找的,但是从右边而不是左边添加。下划线表示添加字符的占位符。它们实际上会在屏幕上显示(当然,除非被替换)。

一个广泛的例子:

准备:设置字符串长度:---------

准备:设置固定:---XYZ---

添加字符:---XYZ--a

添加字符:---XYZ-ab

添加字符:---XYZabc

添加字符:--aXYZbcd

添加字符:-abXYZcde

添加字符:abcXYZdef

删除字符:-abXYZcde

删除字符:--aXYZbcd

删除字符:---XYZabc

添加多个字符:abcXYZmno

删除多个字符:---XYZabc

ANSWER

根据@Charmander的建议,这是一个完整的例子:

var carr:Array = [];

function fillMaskChars(maskText:String, chars:String, pop:Boolean = false):String
{
    var maskLen:int = maskText.match(/-/g).length;

    if (pop)
    {
        carr.pop();
    }
    else if (carr.length < maskLen)
    {
        carr = carr.concat(chars.split('', maskLen - carr.length));
    }

    if (carr.length == 0)
    {
        return maskText;
    }

    var i = carr.length - maskLen - 1;

    return maskText.replace(/-/g, function()
        {
            return carr[++i] || '-';
        });
}

一些测试:

var characters:String = "oed";
var curMask:String = "--W-RK---";

var outText:String = maskChars(curMask, characters);
trace(outText);

characters = "!";
outText = maskChars(curMask, characters);
trace(outText);

characters = "abcdefghij";
outText = maskChars(curMask, characters);
trace(outText);

outText = maskChars(curMask, "", true);
trace(outText);

outText = maskChars(curMask, "", true);
trace(outText);

outText = maskChars(curMask, "", true);
trace(outText);

outText = maskChars(curMask, "", true);
trace(outText);

2 个答案:

答案 0 :(得分:1)

我认为你会发现一个更合适的阵列。我担心我没有ActionScript的经验,但从JavaScript转换起来应该不难。

function fillMaskWithCharacters(mask, characters) {
    var masked = mask.match(/-/g).length;
    var i = 0;

    return mask.replace(/-/g, function() {
        return characters[--i + masked] || '-';
    });
}

传递一个字符数组,您可以根据需要进行操作。例如:

fillMaskWithCharacters('--w-rk---', ['!', 'd', 'e', 'o']); // "--worked!"

答案 1 :(得分:0)

我真的不明白为什么这应该非常有用,但我想这可以通过替换substring和lastindexof来完成

var myChars:String = _abXYZcd;
var seperator:String = XYZ;

var stringToAdd:String = ee;

var pos:int = _myChars.lastIndexOf(seperator);
var newString = myChars.substring(0, pos) + myChars.substring( (pos+seperator.length), myChars.length)
newString += seperator;
newString += stringToAdd;

但我认为使用数组或其他东西会更有用。 喜欢。另外,如果应该有限制的字符,我不会得到,在这种情况下,替换和子串的所有位置只能计算一次...我没有测试它,但我认为你明白了。