Javascript正则表达式替换多个组

Javascript正则表达式替换多个组,javascript,regex,Javascript,Regex,我正试图根据这样的正则表达式替换多个匹配的组 var paramRegex = /{\s*\[(\w*)\]\s*(\w*)\s*\(([\w\s]*)\)\s*}/i; // should match {[group1] group2 (group3)} var emptyParam = '{[]()}'; emptyParam.replace(paramRegex, 'a $1 b $2 c $3'); 为什么这会导致“a b c”?为什么括号、花括号和偏执词消失了 我希望它打印“{[

我正试图根据这样的正则表达式替换多个匹配的组

var paramRegex = /{\s*\[(\w*)\]\s*(\w*)\s*\(([\w\s]*)\)\s*}/i; 
// should match {[group1] group2 (group3)}
var emptyParam = '{[]()}';

emptyParam.replace(paramRegex, 'a $1 b $2 c $3');
为什么这会导致“a b c”?为什么括号、花括号和偏执词消失了


我希望它打印“{[a]b(c)}”

当替换时,我们通常匹配并捕获需要保留的内容(以便能够使用反向引用引用捕获的值),而只匹配不需要保留的内容

在您的情况下,只需将标点符号放入替换模式:

.replace(/{\s*\[(\w*)\]\s*(\w*)\s*\(([\w\s]*)\)\s*}/g, "{[a]$1b$2(c)$3)}")
                                                        ^^ ^     ^ ^  ^^ 

请参阅

,因为大括号未被捕获。这是一个常见的误解:您没有替换捕获的内容,而是替换了整个匹配项。大括号和圆括号被匹配和使用,因此,它们被替换。所以我必须捕获基本上所有的东西,以实现我想要的?没有办法只替换捕获的组而保持其他所有内容不变?您需要捕获需要保留的内容。或者“手动”添加大括号和圆括号,请参见“好的”,谢谢!