以下に示すように、2 つ (おそらく 3 つ) の文字列をマージできるようにしたいと考えています。これは正規表現を使用して可能ですか? (私が使用している基本言語は Actionscript 3.0 ですが、より一般的な正規表現ソリューションを使用できます。)
アイデアは、XYZ
必要に応じてダッシュを新しい文字に置き換えて、(ダッシュ以外の)文字を所定の位置に固定することです。追加は、固定文字をスキップするスタックのように追加されます。---XYZ---
プレースホルダーを維持するために、3番目の文字列を使用することを想像します。
コメントへの返信
マスクされたテキスト入力は私が探しているものですが、左ではなく右から追加します。アンダースコアは、追加された文字のプレースホルダーを表します。それらは実際に画面に表示されます (もちろん、置き換えられない限り)。
広範な例:
準備: 文字列の長さを設定します:---------
準備: 固定を設定:---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);