2012-04-26 4 views
0

私は[a] [z]という形式の短い文字列の集合を持っています。ここで、aとzは(部分)部分文字列です。 [z]に入れることができる文字列は約100に制限されており、そのうちの1つだけが入力文字列全体に表示されます。一連の文字列replace()をどのように中断しますか?

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

私のアプローチは、変更された文字列を返す前にすべての可能性をループしているため、最適ではありません。私は、一致があるときに入力文字列が変更されるという事実を利用して、検索を中断する方法があるかどうかを知りたいと思いますか?交換が行われたことをどのように伝えることができますか?私は1ページあたり約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 

答えて

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; 
} 
+0

おかげで、迅速かつ汚いプロファイリングは、ほぼ同じ性能を示したが、私は、オブジェクトのアプローチがきれいだと思います。 –

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; 
} 
関連する問題