我有[a] [z]形式的短字符串集合,其中a和z是(组件)子串。可以进入[z]的字符串限制为大约100,并且只有其中一个字符串可以出现在整个输入字符串中。
现在,我需要将[z]字符串替换为另一个字符串。鉴于数据格式,一旦我找到匹配,我知道我可以停止寻找。我想返回被替换的字符串。
我的方法不是最理想的,因为我在返回修改后的字符串之前循环遍历所有可能性。我想知道是否有办法打破搜索,可能使用输入字符串在匹配时更改的事实?我怎么知道更换发生了?我需要每页加载大约1000次运行此函数,所以我认为任何改进都会被注意到。提前谢谢!
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
答案 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;
}
答案 1 :(得分: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;
}