0

[a][z] という形式の短い文字列のコレクションがあります。ここで、a と z は (コンポーネント) 部分文字列です。[z] に入る文字列は 100 程度に制限されており、入力文字列全体で 1 つしか表示されません。

ここで、[z] 文字列を別の文字列に置き換える必要があります。データ形式を考えると、一致するものを見つけるとすぐに、探すのをやめることができます。置換された文字列を返したい。

変更された文字列を返す前にすべての可能性をループするため、私のアプローチは最適ではありません。おそらく、一致したときに入力文字列が変更されるという事実を使用して、検索を中断する方法があるかどうか知りたいですか? 置換が行われたことをどのように確認できますか? この関数は、ページの読み込みごとに約 1000 回実行する必要があるため、改善が見られると思います。前もって感謝します!

http://jsfiddle.net/MsWAZ/3/

function replaceEnd(input) {
        // bb, cc, and d are what I call [z]
        input = input.replace("bb", "Bob");
        input = input.replace("ccc", "Carl");
        input = input.replace("d", "Dave");

        return input;
}

document.write(replaceEnd("aabb") + "<br>");
document.write(replaceEnd("eaccc") + "<br>");
document.write(replaceEnd("uoid") + "<br>");

出力:

aaBob
eaCarl
uoiDave
4

2 に答える 2

1
function replaceEnd(input) {
    input2 = input;
    // bb, cc, and d are what I call [z]
    if((input2 = input.replace("bb", "Bob")) != input) return input2;
    if((input2 = input.replace("ccc", "Carl")) != input) return input2;
    if((input2 = input.replace("d", "Dave")) != input) return input2;

    return input2;
}
于 2012-04-26T22:48:58.317 に答える
1
function replaceEnd(input) {
        // bb, cc, and d are what I call [z]
        var replacements = {"bb" : "Bob", "ccc" : "Carl", "d" : "Dave"}, newInput;
    for(var key in replacements){
        if((newInput = input.replace(key,replacements[key])) != input)
            return newInput;
    }
    return input;
}
于 2012-04-26T22:49:57.800 に答える