防止javascript正则表达式替换功能做更多替换

时间:2013-04-24 10:58:58

标签: javascript regex replace break

据我所知,我发现一个有趣的问题没有在这里得到解答。我有一个正则表达式对象,我用它来在字符串中进行替换。问题是,如果我想停止进一步替换,因为我找到了一个特定的字符串,我不能这样做。 “break”语句显然不起作用,因为这既不是一个循环也不是一个switch-case。

如果我使用“返回”,则替换将继续。我可以在函数的头部使用“不完整”变量(参见下面的示例)来防止进一步替换但是检查将继续进行,它将被匹配正则表达式的次数进行评估,这是不需要的。

有没有办法完全停止此功能的替换?

感谢。

示例:

var regex = new RegExp("whatever", "g");
str = str.replace(regex, function(tot, group1) {
    if (group1 == "i_wanna_stop_str") {
        incomplete = true;
        break; <-- not working
    } else {
        ... compute replacement ...
        return replacement;
    }
}

2 个答案:

答案 0 :(得分:1)

替换为原始的一旦标志:

var regex = new RegExp("whatever", "g");
str = str.replace(regex, function(tot, group1) {
    if (group1 == "i_wanna_stop_str") {
        incomplete = true;
        break; <-- not working
    } else {
        if (incomplete) {
            replacement = <captured original>;
        } 
        else {
            ... compute replacement ...
        }
        return replacement;
    }
}

答案 1 :(得分:0)

在找到要替换的正则表达式时找到循环替换并且在停止字符串

之前找到它 代码中的


var str = " blah blah whatever blah blah whatever i_wanna_stop_str blah blah whatever";
var stopStr = "i_wanna_stop_str";
var searchStr = "whatever";
while (str.indexOf(searchStr) != -1 && str.indexOf(searchStr) < str.indexOf(stopStr)) {
    str = str.replace(/whatever/, "some");
}