问题标签 [capturing-group]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1873 浏览

java - Java 模式打印捕获组

有没有办法用Pattern对象检索所有捕获组的列表。我调试了对象,它说的只是有多少组(5)。

我需要检索以下捕获组的列表。

输出示例:


更新:

我不一定要问是否存在正则表达式,但这将是最有利的。到目前为止,我已经创建了一个仅匹配最内部组的基本解析器(我不检查大多数越界条件)。我想知道是否有办法引用已经访问过的括号。我可能必须实现一个树结构?

0 投票
5 回答
112942 浏览

regex - Vim 正则表达式捕获组 [bau -> byau : ceu -> cyeu]

我有一个单词列表:

我想把这个列表变成:

我没有成功尝试命令:

鉴于这不起作用,我必须改变什么才能使正则表达式捕获组在 Vim 中工作?

0 投票
1 回答
72 浏览

c# - 用作词法分析器时如何判断哪个组匹配?

我使用 .NET Regex 作为一个简单的词法分析器:

匹配后,我可以通过遍历所有代表令牌类型的命名组并找到实际匹配的组来确定每个令牌的类型。不过,这似乎有点缓慢和笨拙。我想知道:有没有更好的方法来使用 .NET Regex API 查找所有匹配的组?

0 投票
3 回答
183 浏览

regex - 为什么正则表达式捕获组在分配给标量变量时不返回捕获的文本?

我想捕获文件某些行中包含的数字。我正在使用 Perl,并且正在使用匹配运算符来捕获相对于文件行中其他符号的特定位置出现的数字。这是一个示例行:

这是脚本的相关部分:

$position打印为1,而不是我需要的数字。根据在线正则表达式工具 regex101.com,我使用的正则表达式有效;它捕获行中的适当元素。

0 投票
1 回答
69 浏览

javascript - String#match() 捕获组的奇怪行为

问题:我有一个字符串,例如:"to see to be to read"并且我想捕获不带“to”前缀的 3 个动词,在本例中为beseeread

在 Regex 101 上,我尝试了这个非常简单的正则表达式,它解决了问题:

正则表达式/to (\w+)/g
结果: ['be', 'see', 'read']

只是出于好奇,我已经使用正面的前瞻来制作另一个 regex,结果是一样的。

正则表达式/(?=to \w+)\w+ (\w+)/g
结果: ['be', 'see', 'read']

好的。奇怪的是:当我在浏览器控制台(Chrome 或 Firefox)上运行这个正则表达式时,结果是不同的。以下两次尝试给了我相同的结果:所有三个组都包括前缀to

我在这里遗漏了什么还是我踩到了一个错误?

免责声明:这不是家庭作业,我只是在验证一个更大的问题。我不是正则表达式专家,但知道一两件事。

编辑:我想我被 Regex101 愚弄了。它给我的代码示例显示了该String#match()方法,但此函数不会在结果组中相应地排除正则表达式组。循环RegExp#exec()比赛是要走的路!

0 投票
1 回答
1108 浏览

java - Java 正则表达式:当事先不知道它们的数量时,如何在特定上下文中反向引用捕获组

作为介绍性说明,我知道关于使用 regex 解决问题的老话,并且我也知道使用 RegEx 处理 XML 的注意事项。但请容忍我一会儿……

我正在尝试对一组字符进行正则表达式搜索和替换。我事先不知道该组匹配的频率,但我只想使用特定的上下文进行搜索。

一个例子:如果我有以下字符串"**ab**df**ab**sdf**ab**fdsa**ab**bb"并且我想搜索"ab"并替换为"@ab@",则使用以下正则表达式可以正常工作:

搜索正则表达式:

代替:

正如预期的那样,我总共得到了四场比赛。在每场比赛中,组 ID 都是相同的,因此反向引用 ($1, $2 ...) 也可以正常工作。

但是,如果我现在向字符串添加某个上下文,则上面的正则表达式会失败:

搜索字符串:

搜索正则表达式:

这只会找到第一个匹配项。但即使我在原始正则表达式中添加了一个非捕获组,它也不起作用("<context>(?:(.*?)(ab)(.*?))*</context>")。

我想要的是第一次搜索中的匹配列表(没有上下文),在每个匹配中,组 ID 都是相同的。

知道如何实现吗?

0 投票
0 回答
115 浏览

regex - 基于 PCRE 正则表达式中另一个捕获组的捕获组名称

假设我的纯文本是

我想捕获键值对,但要让值捕获组以相应的键命名。例如,如果我要硬编码正则表达式,它会像:

演示:http ://regex101.com/r/wC8nF5

但是,我不想对其进行硬编码,因为我不完全知道键的名称是什么。因此,由于无法重命名捕获组,我就这样接近了

演示:http ://regex101.com/r/hV8oZ2

我知道捕获组的名称只能是单词字符(只允许特殊字符是_),但假设所有键名都是单词字符,那么基于 PCRE 中的另一个捕获组命名捕获组的正则表达式是什么?

0 投票
2 回答
389 浏览

java - 正则表达式捕获组无法识别组(1),尽管匹配()为真

我正在用 Java 编写一些简单的(我认为)正则表达式来删除直接出现在某些指定标点符号旁边的星号或 & 号。
这是我的原始代码:

它不仅删除了字符串的“ptr”部分,还删除了punct!(即用空字符串替换匹配的字符串)
我通过以下方式进一步检查:

并发现:

我不知道我做错了什么,因为我之前使用过这种精确的方法,并且使用了更复杂的正则表达式,并且 group(1) 总是返回捕获的组。一定有什么我没能发现的,所以..有什么想法吗?

0 投票
1 回答
63 浏览

javascript - Efficiency in capturing groups (?: => work(?:\s+)?group VERSUS work(\s+)?group

Both expressions work for me:

I need to capture workgroup OR work group considering the space could be a line break (\s+)?

However, the first expression has a non-capture groups (?: and I am wondering if it is worse or better in the performance/fast output of the Regex. In other words, in terms of performance, what is the best expression?

0 投票
5 回答
102 浏览

java - Java Regex:替换为捕获组

我有一个这样的字符串:

我想得到102457921。如何使用正则表达式实现它?

我试过了:

但它不起作用。有什么提示吗?