0

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

这个想法是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);
4

2 回答 2

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!"
于 2012-07-14T23:06:52.453 回答
0

我真的不明白为什么这应该非常有用,但我想这可以通过替换子字符串和 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;

但我认为使用数组或其他东西会更有用。像。我也不知道是否应该有有限的字符,在这种情况下,替换和子字符串的所有位置只能计算一次......我没有测试它,但我想你明白了。

于 2012-07-14T21:44:56.223 回答