使用两个捕获组使用JavaScript的replace()函数

时间:2015-11-08 16:01:03

标签: javascript regex capturing-group

给定这样的字符串+as[23+"AS@D"-@]@[之间的所有]实例替换为[之后的数字(在这种情况下: 23)。请使用JavaScript回答(建议使用.replace())。因此,使用此算法,+as[23+"AS@D"-@]将更改为+as[23+"AS23D"-23]

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

的所有实例

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

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

1 个答案:

答案 0 :(得分:0)

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

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

$0表示[]之间的整个字符串,$1是第一个捕获组,即[之后的数字。