我希望能够合并两个(可能是三个)字符串,如下所示。这可以使用正则表达式吗?(我使用的基本语言是 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);