【问题标题】:Using two capturing groups with JavaScript's replace() function通过 JavaScript 的 replace() 函数使用两个捕获组
【发布时间】:2015-11-08 16:01:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我投票结束这个问题,因为 stackoverflow 不是代码编写服务。
  • @melpomene 我已经编辑了我的问题以向您展示我的工作。
  • 为什么认为第二个捕获组“没有被捕获”? (那是什么意思?)
  • @melpomene 我认为我的正则表达式有错误。如果正则表达式有效,那么我的问题就解决了。
  • 您应该将其拆分为 2 个操作:1. 获取一个数字,2. 将所有 '@' 替换为一个数字。

标签: javascript regex capturing-group


【解决方案1】:

您可以在 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 是第一个捕获组,即紧跟在[ 之后的数字。

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 2013-02-26
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多