据我所知,我发现一个有趣的问题没有在这里得到解答。我有一个正则表达式对象,我用它来在字符串中进行替换。问题是,如果我想停止进一步替换,因为我找到了一个特定的字符串,我不能这样做。 “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;
}
}
答案 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");
}