20

这是我的问题。我有一个混合大小写的字符串。无论大小写如何,我都想搜索,然后用匹配两边的一些字符替换匹配。

例如:

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#"

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

4

3 回答 3

42

这可以使用正则表达式替换的回调函数来完成。

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

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

alert(s2);

演示:http: //jsfiddle.net/dxeE9/

于 2012-12-05T11:02:57.473 回答
23

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

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

于 2012-12-05T11:04:43.687 回答
5

你也可以这样做

yourString.replace(/([a-z]+)/ig, "#$1#")
于 2012-12-05T11:12:38.990 回答