问题标签 [capture-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 投票
2 回答
113 浏览

c# - C#正则表达式正则表达式匹配最后一组中的字符,但不是空组

请任何人都可以告诉我一个解决方案,该解决方案将允许我的正则表达式匹配以下数据行......

...但应该在这条线上失败(由于最后一组是空的)

我现在的表达是:

...在 Expresso 中运行良好,但在我的 C# 代码中却不行!

任何帮助表示赞赏。谢谢你。

没有帮助的参考: 正则表达式匹配一个额外的空组

0 投票
1 回答
1115 浏览

regex - Powershell 正则表达式捕获组未插入替换

我有一个字符串

我正试图逃离其中的空间并变成

我的正则表达式代码是

但由于某种原因,我的输出是

关于为什么会发生这种情况的任何见解?

0 投票
0 回答
55 浏览

regex - 重复捕获组正则表达式

我有大量的类数据,我需要对其运行正则表达式并从中获取数据。问题是我需要一个重复的捕获组来完成它。

我需要的结果将返回两个匹配项

  1. 比赛
    Group1:Womn St 157A
    Group2:QUEERHISTORY MAKING
    Group3:32680
    Group4:LEC
    Group5:A
    Group6:SHAH, P.
    Group7:TuTh 11:00-12:20p
    Group8:IAB 13
  2. 比赛 Group1:Womn St 171
    Group2:SEX/RACE & CONQUEST
    Group3:32710
    Group4:LEC
    Group5:A
    Group6:O'TOOLE, R.
    Group7:TuTh 2:00- 3:20p Group8
    :DBH 1300
    Group9:25610
    Group10:26350
    Group11:60320
    Group12:32711
    Group13:DIS
    Group14:1
    Group15:MONSON, A.
    Group16: W 9:00- 9:50
    Group17:HH 105
    Group18:25612
    Group19:26351
    Group20:60321
0 投票
1 回答
11971 浏览

regex - 正则表达式:在捕获组中捕获组

介绍

(你可以跳到如果……如果你厌倦了介绍)

这个问题并不是特别针对 VBScript(我只是在这种情况下使用它):我想找到一个通用正则表达式使用的解决方案(包括编辑器)。

这开始于我想创建示例 4 的改编版本,其中 3 个捕获组用于在 MS Excel 中的 3 个单元格之间拆分数据。我需要捕获一个完整的模式,然后在其中捕获 3 个其他模式。但是,在同一个表达式中,我还需要捕获另一种模式,并再次捕获其中的 3 个其他模式(是的,我知道……但在指向 nutjob 手指之前,请完成阅读)。

我首先想到了命名捕获组,然后我意识到我不应该“混合命名和编号的捕获组”,因为它“不推荐,因为这些组的编号方式不一致”

然后我查看了VBScript SubMatches«non-capturing»,我得到了针对特定情况的有效解决方案:

这是 regex 的 Rubular 中的演示。在这些:

124;12;3
我的 id1:213 我的 id2:232 我的话:ins4yanrgx
:8587459 :18254182540215 :dcpt
0;1;2

它返回带有数字的前 2 个单元格和带有数字或单词的第3个单元格。基本上,我使用了一个具有 2 个“父”模式的非捕获组(“父”= 我想检测其他子模式的广泛模式)。如果第一个模式具有匹配的子模式(一个捕获组),那么我将其值和该模式的剩余捕获组放在 3 个单元格中。如果不是,我检查第 4捕获组(属于第 2 个模式)是否匹配,并将剩余的子模式放在相同的 3 个单元格中。

如果什么...

而不是这样的:

这样的事情是可能的:

与其(#:创建非捕获组,不如创建一个“父”编号的捕获组。通过这种方式,我可以执行类似于示例 4的操作:

它将搜索父模式,直到在子模式中找到匹配项(将返回第一个匹配项,理想情况下,不会搜索其余匹配项)。

已经有这样的事情了吗?还是我完全从正则表达式中遗漏了一些允许这样做的东西?

其他可能的变化:

  • 直接引用父子模式,例如:(#2$3这在我的示例中相当于$6);
  • 在其他人中根据需要创建尽可能多的捕获组(我想这会更复杂,但也是最有趣的部分),例如:使用正则表达式(相同语法),(#:^_(?:(#:(\d+):\w+-(\d))|(#:\w+:(\d+)-(\d+)))_$)|(#:^\w+:\s+(#:(\w+);\d-(\d+))$)并以如下模式获取##$1

    _123:smt-4_它会匹配:123
    _ott:432-10_它会匹配:432
    yant: special;3-45235它会匹配:特殊

如果您发现此逻辑中有任何错误或缺陷,请告诉我,我会尽快编辑。

0 投票
8 回答
107504 浏览

regex - 如何在 Go 正则表达式中获取捕获组功能

我正在将一个库从 Ruby 移植到 Go,并且刚刚发现 Ruby 中的正则表达式与 Go (google RE2) 不兼容。我注意到 Ruby 和 Java(加上其他语言使用 PCRE 正则表达式(perl 兼容,支持捕获组)),所以我需要重新编写我的表达式,以便它们在 Go 中编译好。

例如,我有以下正则表达式:

这应该接受输入,例如:

捕获组允许将年、月和日捕获到变量中。要得到每个组的值,很容易;您只需使用组名索引返回的匹配数据,然后返回值。因此,例如要获取年份,类似于以下伪代码:

这是我在表达中经常使用的一种模式,所以我有很多重写工作要做。

那么,有没有办法在 Go 正则表达式中获得这种功能?我应该如何重写这些表达式?

0 投票
3 回答
50 浏览

javascript - 正则表达式替换返回不带 .* 的意外结果

我正在尝试创建一个执行以下转换的正则表达式:

  1. Apple Orange>AO
  2. Load Module>LM
  3. anApple Orange>O
  4. toLoad Module>M

我找到了一个合适的模式,但注意到一个奇怪的行为。这是我的初步尝试:

用这个表达式在第三个(和第四个)测试用例上运行替换给了我一个令人惊讶的结果:

为什么这令人惊讶?好吧,第一组显然不匹配,因为字符串不是以大写字母开头,但第二组只选择一个大写字母:([A-Z]),而不是后面的所有内容:([A-Z].*)

令我惊讶的是,.*在最后一个捕获组之后添加给了我正确的结果:

为什么会发生这种情况超出了我对 JS 和正则表达式的理解。我很高兴知道什么样的黑魔法导致单个[A-Z]返回多个,甚至是一些小写字符。

这是一个可运行的演示:

0 投票
2 回答
649 浏览

javascript - 使用动态 RegExp 获得 1 美元的捕获组

我很好奇是否有人知道我在这里做错了什么。我想在表达式中使用一个变量,但由于某种原因,当我尝试使用时,它似乎没有使用$1.

这正确返回:

出于某种原因,这不会:

我是在 RegExp 中捕获组的新手,我找不到其他人遇到这个问题,所以我认为我错过了一些非常简单的东西。

0 投票
1 回答
42 浏览

php - 过早的组捕获 PHP 正则表达式

我将 HTML 存储在 MySQL 数据库中,我正在从 Joomla 迁移到新的 WordPress 安装。我需要删除每页底部的一些标题文本。

HTML 的一个例子:

我正在使用 PHP 脚本来查询数据库并进行正则表达式匹配。

到目前为止我的正则表达式:

我需要完全删除第二个字幕组(CAPTION TEXT HERE),因此实质上将组 1,2 和 3 替换为组 1 和 3。组 2 可以包含任何字母数字或特殊字符。

我遇到的问题是捕获组 1 匹配链接 1 的结束锚标记并继续直到[/caption]

会发生什么:

被替换为:

当我真正需要的是:

先感谢您!

0 投票
1 回答
1915 浏览

regex - 带有 OR 运算符的 Scala 正则表达式提取器

我有这个冗长的代码,可以在 Scala 中短路正则表达式提取/匹配。这会尝试将字符串与第一个 Regex 匹配,如果不匹配,它会尝试将字符串与第二个 Regex 匹配。

结果如下:

s == "ab" 然后提取值 == "b"

s == "cd" 然后提取值 == "c"

s == "gg" 然后提取值 == 无。

我的问题是我们如何将两个正则表达式与正则表达式或运算符组合成一个正则表达式,并且仍然使用 Scala 提取器。我试过这个,但总是没有情况。

0 投票
2 回答
1201 浏览

javascript - Javascript 正则表达式:动态捕获组

我第一次尝试将注意力集中在正则表达式上。

对于字符串

基本上,一个起始模式、一个结束模式和中间的任意数量的模式。

所以我想myregex.exec string连续返回

我试过这个的变体

但没有雪茄...