问题标签 [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 回答
182 浏览

ruby - 如何使用 Ruby 的“扫描”方法使捕获组可选?

我有一个像这样的正则表达式:

我想用它处理这样的字符串:

{"Affinity":20,"DisplayName":"Moe Larry","Emails":[{"Address":"moelarry@gmail.com","Primary":true,"Type":{"Id":" HOME"}}],"FullName":{"FamilyName":"Larry","GivenName":"Moe","Unstructured":"Moe Larry"},"Groups":[{"id":"^Mine "}],"Id":"1234567890","MailsS​​ent":0,"Name":"Moe Larry","Phones":[{"Number":"555-999-6661","Type":{ "Id":"MOBILE"}}],"ProfileLink":""},{"Affinity":20,"DisplayName":"stoogesarefunny","Emails":[{"Address":"stoogesarefunny","Primary “:真的}],"EvergreenPhoto":"/photos/private/adflk;jsd394u75430o8752380974321jtkasdljf8937489213749832654","Id":"834754hthbf83744823f","MailsS​​ent":0},{"Affinity":20,"DisplayName":"stoogesaref.电子邮件":[{"地址":"stoogesarefunny@gmail.com","Primary":true}],"EvergreenPhoto":"/photos/private/asdfAJDKLJSFIOEJHLTHSJKLDF234987s897KJHSDFKJHDF89273473ASLKJDLSKJIFEIH","Id":"834754hthbf83744823f""Mails:" 0,"个人资料链接":"stoogesarefunny@gmail.com","Emails":[{"地址":"stoogesarefunny@gmail.com","Primary":true}],"EvergreenPhoto":"/photos/private/asdfAJDKLJSFIOEJHLTHSJKLDF234987s897KJHSDFKJHDF89273473ASLKJDLSKJIFEIH","Id": "834754hthbf83744823f","MailsS​​ent":0,"ProfileLink":"stoogesarefunny@gmail.com","Emails":[{"地址":"stoogesarefunny@gmail.com","Primary":true}],"EvergreenPhoto":"/photos/private/asdfAJDKLJSFIOEJHLTHSJKLDF234987s897KJHSDFKJHDF89273473ASLKJDLSKJIFEIH","Id": "834754hthbf83744823f","MailsS​​ent":0,"ProfileLink":"https://profiles.google.com/stoogesarefunny "},{"Affinity":20,"DisplayName":"Shemp","FullName":{"GivenName":"Shemp","Unstructured":"Shemp"} ,"Groups":[{"id":"^Mine"}],"Id":"1234567890","MailsS​​ent":0,"Name":"Shemp","Phones":[{"Number": "+15553085671","Type":{"Id":"OTHER"}}]},{"Affinity":20,"DisplayName":"ClownFace","FullName":{"GivenName":"ClownFace", "非结构化":"ClownFace"},"Groups":[{"id":"^Mine"}],"Id":"1234567890","MailsS​​ent":0,"Name":"ClownFace","电话":[{"Number":"+15556064040","Type":{"Id":"OTHER"}}]},

这真的很难看,我知道。我希望我能找到一个 xml 提要,但现在这不是一个选项。

我只关心 DisplayName、Groups 和 Phones。我需要将它们提取并保存在数组数组中。组和电话的捕获组需要是可选的,因为并非所有联系人都有它们。但是,我的正则表达式给了我:

显然,Shemp 的所有联系数据都被包含在 stoogesarefunny@gmail.com 的数据中,因为我的正则表达式会继续删除,直到到达 Shemps Group,而不是在他的显示名称之前停止并重新开始。帮助?

PS:不,我不打算拯救所有这些团体,最终只是为了研究发生了什么。

0 投票
1 回答
1230 浏览

.net - 使用正则表达式匹配组的优先规则

考虑以下 .NET 正则表达式:

它定义了四个组,我对它们感兴趣并将分别对其进行分析。

现在,考虑这个正则表达式的输入字符串:

可以像这样匹配它:

也可以这样匹配:

是否记录了正则表达式引擎首选的方式,还是随机的?

0 投票
3 回答
779 浏览

java - Java 模式重复捕获组

我有以下字符串

字符串可以扩展但具有相同的模式,并且在它的两侧会有其他字符串:例如

我想捕获所有 2 位数字。

我有以下正则表达式

但是使用这个正则表达式,我只能得到以下组:

0 投票
1 回答
3220 浏览

sql - SQL查找和替换正则表达式捕获组限制?

我需要将电子表格中的数据转换为 SQL 中的插入语句。我已经计算出了在 SSMS 中使用查找和替换工具的大部分正则表达式,但是在我的最终替换中尝试引用第 9 个带括号的项目时遇到了问题。

以下是原始记录:

这就是我需要的(现在):

由于允许的带括号的项目数量的限制,我必须进行三遍替换。如果我可以首先使它作为 POC 工作,这可能会在存储过程中起作用。

这是第一个匹配表达式:

和替换:\10\2/0\3/\40\5/0\6/\7

这会将零添加到月份和日期,以便它们至少有两个字符。

下一个匹配将日期重新格式化为查询所需的格式(没有关于不使用日期字段的评论。这是数据库的客户要求)。

匹配表达式:

和替换:\1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)

最后,最终匹配将结果插入到将在插入语句中使用的 SQL 语句中。

匹配表达式:

和替换:select '\1','\2','\3','\4','\5','\6','\7','\8','\9'

除了最后一次更换外,一切正常。由于某种原因, \9 没有从比赛中获取数据。如果我只是用 \9 替换整个替换表达式,我会得到一个空格。如果我使用 \8,我会得到 N。如果我消除第 8 个括号中的项目,从而使我的第 9 个项目成为第八个,它会返回我想要的,20120101。

所以我的问题是,在使用查找/替换和正则表达式时,SSMS/SQL 是否允许 9 个标记表达式?或者我在这里错过了什么?我知道还有其他方法可以做到这一点。在我们将其移入存储过程或应用程序之前,我只是想将其作为 POC 快速完成。

感谢您的任何帮助。-彼得

0 投票
7 回答
6754 浏览

javascript - Javascript RegExp 非捕获组

我正在编写一组正则表达式来将 CSS 选择器转换为 id 和类数组。

例如,我希望 '#foo#bar' 返回 ['foo', 'bar']。

我一直在努力实现这一目标

但是当非捕获前缀 ?: 应该忽略 # 字符时,它会返回 ['#foo', '#bar']。

有没有比对每个返回的字符串进行切片更好的解决方案?

0 投票
3 回答
2658 浏览

java - REGEXP:捕获组不跟随

我需要匹配以下语句:

不匹配这些:

所以我认为这个正则表达式会起作用:

但它没有 - 我不知道为什么 - 我相信这可能是由捕获组(。*)引起的,所以我认为也许让 * 运算符变得懒惰会解决问题......但不是。这个正则表达式也不起作用:

谁能指出我的解决方案方向?

解决方案

要检索没有 is here结尾的句子(如Hi there John Doe (the second)),您应该使用(作者@Thorbear):

对于中间包含一些数据的句子(例如Hi there John Doe (the second) is hereJohn Doe(第二个)是所需的数据),简单的分组就足够了:

.

0 投票
1 回答
3264 浏览

javascript - JavaScript 正则表达式返回引用从单个捕获组(多个组)返回匹配数组

在花了一夜试图找到不可能的答案之后,我相当确定,并且我已经开发了一种解决方法-但是,如果有人知道更好的方法,我很想听听...

我在代码上经历了很多迭代,以下只是一个思路。我相信在某些时候我使用了全局标志,以便 match() 工作,我不记得现在是否有必要。

在这个简化的代码中,这里的想法是可选组 1,其中有一个未指定的数量,将匹配 @abc、@def 和 @ghi。它只会捕获其中有一个或多个的字母字符。第 2 组是相同的,除了匹配 & 符号。它还应该锚定在字符串的开头和结尾。

我希望能够反向引用两组的所有匹配项,即:

我的伙伴说这在 .net 中对他来说效果很好,不幸的是我根本无法让它工作 - 只有任何组的最后一个匹配项会在反向引用中返回,如下所示:

(此外,使任一组可选会造成混乱,设置全局标志也是如此)


以下是我得到的解决方案,捕获有问题的整个部分,并自己创建数组:

0 投票
3 回答
165 浏览

python - 在 Python 中捕获正则表达式

我想在 Python 中使用正则表达式来获取</html>标记后的所有内容,并将其放入字符串中。所以我试图理解如何在 Python 中做到这一点,但我无法让它工作。谁能解释我如何做这个荒谬的简单任务?

0 投票
5 回答
390 浏览

java - 正则表达式无法捕获所有组

使用(jdk 1.6),应用于主题字符串java.util.regex的正则表达式仅捕获而不捕获(模式),因为它应该,给定以下代码:201210(\d{5,5})Test20121000002Testgroup(0)group(1)00002

奇怪的是,另一个类似的正则表达式(例如201210(\d{5,5})Test(\d{1,10})应用于主题字符串)20121000002Test0000000099捕获了组 0 和 1,但没有捕获组 2。

相反,通过使用 JavaScript 的 RegExp 对象,应用于完全相同的主题字符串的完全相同的正则表达式可以捕获所有组,正如人们所期望的那样。我使用这些在线测试仪自己检查并重新检查了这个事实:

我在这里做错了吗?还是 Java 的正则表达式库真的很烂?

0 投票
1 回答
226 浏览

.net - 使用正则表达式提取北美邮政编码

我有以下用于验证北美邮政编码的正则表达式:

仅供参考,我知道在验证某些位置的某些字符方面可能更准确。

我想做的是使用相同的验证常量来提取以下格式的邮政编码:

上面的正则表达式很接近;如果我连接所有捕获组(根除外),我会得到我想要的结果。例如,美国代码将在第 1 组中捕获,或者加拿大代码将在 2 + 3 中捕获。

有一个更好的方法吗?或者也许假设它是正则表达式库的一个特性,用于连接所有子组。(顺便说一下,这是 C# .NET)