我希望能够合并两个(可能是三个)字符串,如下所示。这可能使用正则表达式吗? (我使用的基本语言是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);
答案 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;
但我认为使用数组或其他东西会更有用。 喜欢。另外,如果应该有限制的字符,我不会得到,在这种情况下,替换和子串的所有位置只能计算一次...我没有测试它,但我认为你明白了。