0

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

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

有没有办法完全停止这个函数的替换?

谢谢。

例子:

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;
    }
}
4

2 回答 2

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;
    }
}
于 2013-04-24T11:32:19.970 回答
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");
} 
于 2013-04-24T11:41:25.237 回答