0

以下に示すように、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);
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 に答える