将两个捕获组与 JavaScript 的 replace() 函数一起使用

Using two capturing groups with JavaScript's replace() function

给定这样一个字符串 +as[23+"AS@D"-@][] 之间的所有 @ 实例替换为 [ 之后的数字(在此案例:23)。请使用 JavaScript 回答(建议使用 .replace())。所以使用这个算法,+as[23+"AS@D"-@]会变成+as[23+"AS23D"-23]

这是我的正则表达式 \[(\d+)[^\]]*(\@*)\] 第二个捕获组没有被捕获(Regexr 告诉我在第二个捕获组中没有捕获任何东西)。我需要帮助使第二个捕获组捕获 @

的所有实例

我曾尝试使用 Mozilla Developer 寻求帮助,但没有成功。任何帮助将不胜感激。回答必须有解释。

如果这个问题不够清楚,请在评论中告诉我如何改进。

您可以在 Javascript 中使用带有回调函数的 replace:

var s = '+as[23+"AS@D"-@]';
var r = s.replace(/\[(\d+)[^\]]*\]/, function([=10=], ) {
                   return [=10=].replace(/@/g, );});
//=> +as[23+"AS23D"-23]

[=12=] 表示 [] 之间的整个字符串,</code> 是第一个捕获组,即 <code>[.[=17= 之后的数字]