如何突破一系列字符串replace()?

时间:2012-04-26 22:40:12

标签: javascript

我有[a] [z]形式的短字符串集合,其中a和z是(组件)子串。可以进入[z]的字符串限制为大约100,并且只有其中一个字符串可以出现在整个输入字符串中。

现在,我需要将[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

2 个答案:

答案 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;
}