gpt4 book ai didi

javascript - 正则表达式匹配一个额外的空组

转载 作者:行者123 更新时间:2023-12-04 00:27:34 25 4
gpt4 key购买 nike

我是正则表达式领域的新手。
我将在下面发布的所有内容都是我的代码中的简化示例。

我有一个字符串,比如说 test_1,some_2,foo,bar_4,我想用 title: test (1) title: some (2) title: foo () title: bar (4) 替换

我现在拥有的是(有效):

var test = "test_1,some_2,foo,bar_4,";
console.log(test.replace(/(.*?)(?:_(\d))?,/g, "title: $1 ($2)\n"));

输出:
title: test (1)
title: some (2)
title: foo ()
title: bar (4)

为了使事情变得正确,我想摆脱最后一项后的昏迷。该列表将类似于 test_1,some_2,foo,bar_4 (bar_4 后没有昏迷)

所以新代码:
var test = "test_1,some_2,foo,bar_4";
console.log(test.replace(/(.*?)(?:_(\d))?(?:,|$)/g, "title: $1 ($2) "));

输出错误。最后还有一个额外的空匹配:
title: test (1)
title: some (2)
title: foo ()
title: bar (4)
title: ()

我的问题是:为什么?如何解决?实际的正则表达式是否有任何可能的改进?

demo jsFiddle

最佳答案

您正在获得最后一个误报匹配,因为您的正则表达式匹配空字符串:

"".replace(/(.*?)(?:_(\d))?(?:,|$)/g, "title: '$1' ('$2') ");
title: '' ('') 

因此,在您的情况下,在所有字符都被消耗后,它将匹配一个空字符串。

您可以通过将第一组更改为非可选来进行控制,考虑到它并不是真正的可选组,因为它显示。
/(.*?)(?:_(\d))?(?:,|$)/g
--^^--

例如,
var str = "test_1,some_2,foo,bar_4";
test.replace(/([a-z]+)(?:_(\d))?(?:,|$)/gi, "title: '$1' ('$2') ");
title: test (1) title: some (2) title: foo () title: bar (4)

那是,
  • ([a-z]+) : 匹配至少一个字母字符和
  • gi : 使字符串不区分大小写。
  • 关于javascript - 正则表达式匹配一个额外的空组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892045/

    25 4 0
    文章推荐: 未生成 Grails Spring Security 登录/注销 Controller
    文章推荐: python-3.x - Python : Running nested loop, 2D 移动窗口,并行
    文章推荐: ruby-on-rails - Rails 4 和 Turbolinks - 元标签不变
    文章推荐: center - 如何使
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com