与屏蔽文本一样,如何用文本填充占位符,并删除文本以返回占位符



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

其思想是XYZ(非短划线)字符固定在适当的位置,根据需要用新字符替换短划线。任何添加都是像一个跳过固定字符的堆栈一样添加的。我设想使用第三个字符串:---XYZ---来维护占位符。

回复评论

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

一个广泛的例子:

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

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

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

添加字符:---XYZ-ab

添加字符:---XYZabc

添加字符:--aXYZbcd

添加字符:-abXYZcde

添加字符:abcXYZdef

删除字符:-abXYZcde

删除字符:--aXYZbcd

删除字符:---XYZabc

添加多个字符:abcXYZmno

删除多个字符:---XYZabc

答案

根据@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);

我认为您会发现一个更合适的数组。恐怕我没有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!"

我真的不明白为什么这应该很有用,但我想这可以通过替换的子字符串和lastindexo来完成

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;

但我认为使用数组之类的东西会更有用。喜欢此外,我不知道是否应该有有限的字符,在这种情况下,替换和子字符串的所有位置只能计算一次。。。我没有测试,但我想你已经明白了。

最新更新