我有一个文本字符串,其中包含一个重复模式,每个重复之间用.(点)字符隔开.模式may_123结尾(下面是一个数字序列),我想在专用捕获组中捕获这些数字.

The RegEx (ECMAScript) I have built mostly works:
https://regex101.com/r/iEzalU/1

/(label(:|\+))?(\w+)(?:_(\d+))?/gi

然而,(\w+)部分表现得贪婪,并超越了(?:_(\d+))?部分.

Regex with Greedy behavior

添加?以生成\w+非贪婪(\w+?)有效,但现在我 for each 与\w匹配的角色都有一个捕获令牌

Regex with non-greedy behavior

How can I make this regex such that \w+ acts greedy but still does not overtake the _(\d+) part?
Otherwise, is it possible to capture all tokens matched by the non-greedy \w+?, as a single match? (some capturing/non-capturing groups magic?)

推荐答案

在创建正规表达时,最好考虑预期的匹配边界.

您知道需要匹配更长的字符串中的子字符串,因此可以同时排除$\z.数字、字母、底线都是与\w匹配的所有单词字符,因此您希望将全部匹配到单词字符以外的字符(或者,可能,直到字符串的结尾).

我建议使用

(label[:+])?(\w+?)(?:_(\d+))?\b

查看regex demo

Details:

  • (label[:+])? -可选第1组:label,然后是:+
  • (\w+?) -第2组:尽可能少的一个或多个字符
  • (?:_(\d+))? -可选序列:_,然后捕获一个或多个数字到组3中
  • \b -下一个字符只能是非单词字符,或者后面应该是字符串的结尾.

Javascript相关问答推荐

未使用Outlet渲染子组件

d3可排序表标题行中有收件箱--如何使收件箱不触发排序?

响应式JS DataTable中的Bootstrap 5弹出程序无法正常工作

积分计算和 colored颜色 判断错误

如何通过在提交时工作的函数显示dom元素?

Phaser框架-将子对象附加到Actor

使用axios.获取实时服务器时的404响应

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

如何在Javascript中的控制台上以一行形式打印循环的结果

Next.js(react)使用moment或不使用日期和时间格式

将现场录音发送到后端

在带有背景图像和圆形的div中添加长方体阴影时的重影线

用于编辑CSS样式的Java脚本

React.Development.js和未捕获的ReferenceError:未定义useState

变量在导入到Vite中的另一个js文件时成为常量.

如何在FastAPI中为通过file:/URL加载的本地HTML文件启用CORS?

删除加载页面时不存在的元素(JavaScript)

Django导入问题,无法导入我的应用程序,但我已在设置中安装了它

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色