如何在javascript中搜索替换为正则表达式并保持大小写为原始大小写

如何在javascript中搜索替换为正则表达式并保持大小写为原始大小写,javascript,regex,Javascript,Regex,这是我的问题。我有一个混合大小写的字符串。我想不考虑大小写进行搜索,然后用匹配两边的一些字符替换匹配 例如: var s1 = "abC...ABc..aBC....abc...ABC"; var s2 = s.replace(/some clever regex for abc/g, "#"+original abc match+"#"); s2中的结果应如下所示: "#abC#...#ABc#..#aBC#....#abc#...#ABC#" 这可以用正则表达式完成吗?如果是这样,怎么做

这是我的问题。我有一个混合大小写的字符串。我想不考虑大小写进行搜索,然后用匹配两边的一些字符替换匹配

例如:

var s1 = "abC...ABc..aBC....abc...ABC";
var s2 = s.replace(/some clever regex for abc/g, "#"+original abc match+"#");
s2中的结果应如下所示:

"#abC#...#ABc#..#aBC#....#abc#...#ABC#"

这可以用正则表达式完成吗?如果是这样,怎么做?

这可以使用regex replace的回调函数来完成

var s1 = "abC...ABc..aBC....abc...ABC";

var s2 = s1.replace(/abc/ig, function (match) {
  return "#" + match + "#"  ;
}
 );

alert(s2);

演示:

这可以使用反向引用完成:

var s2 = s.replace(/your complex regex/g, "#$&#");
反向引用$&带来了整个匹配。如果您希望在任何情况下匹配“abc”:

var s2 = s.replace(/abc/ig, "#$&#");
如果您只想引入较大图案的一部分,您可以通过其组号来引用它:

var s2 = s.replace(/some (part) of a string/ig, "#$1#");
组由左至右的左括号编号,从
$1
$9

您也可以这样做

yourString.replace(/([a-z]+)/ig, "#$1#")

听起来很有希望,你能给我个建议吗example@Graham我的不活泼?;-)它更短,可能更快;-)@JanDvorak您的回答同样精彩,但IMHO回调函数与带反向引用的表达式相比,在匹配过程中提供了更大的灵活性。@DhruvPathak我同意回调非常灵活且易于学习;-)@JanDvorak回调可能提供更大的灵活性,并且很容易知道,但与使用backreference相比,它们的速度较慢。看到这个正则表达式了吗?@Graham和你的一样。我假设“abc”只是一个占位符,你已经知道如何匹配它了。你能在regex101上展示这个例子吗?它是否也适用于python或php设置?这将用“abC”替换所有发生的情况,这不是我想要的want@Graham如果不想匹配所有事件,可以删除
g