Javascript Regex-替换匹配字符串的所有出现,括号之间的任何字符串除外

Javascript Regex - Replace all occurences of matching string EXCEPT any string between brackets

本文关键字:字符串 之间 任何 替换 Regex- Javascript      更新时间:2023-09-26

我需要替换一个在另一个字符串中有实例的字符串,但如果它在大括号中,则忽略替换任何字符串。

我尝试过以下几种:

str = "replace {replace} test replacesreplace"
str.replace(/{[^}]*}|(replace(s)?)/g, "%")
// % % test %%
str = "replace {replace} test replacesreplace"
str.replace(/{[^}]*}|(replace(s)?)/g, "$1"+"%")
// replace% % test replaces%replace%

但我需要替换如下:"% {replace} test %%"

有人能建议如何在Javascript中做到这一点吗?

您可以使用带有String.replace()的函数。如果发现捕获,则返回有支撑的东西,否则返回%

var str = "replace {replace} test replacesreplace";
str = str.replace(/({[^}]*})|replaces?/g, function($0, $1) {
 return typeof $1 != 'undefined' ? $1 : "%";
});
document.write(str);

使用负前瞻

Regex演示

(?!'{)replace(?!'})
  1. (?!'{):否定前瞻-断言不可能匹配{文本
  2. replace:完全匹配replace字符串
  3. (?!'}):Negative Lookahead-断言不可能匹配}文字

Javascript演示

var str = "replace {replace} test replacesreplace";
var replacedStr = str.replace(/(?!'{)replace(?!'})/g, "%");
document.write(replacedStr);