0

我有一组 [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
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 回答