javascript - 带反向引用的正则表达式捕获组

标签 javascript regex backreference

所以我正在尝试解析一些具有相当重复模式的文本文件,而正则表达式会很好地完成这项工作。但是偶然发现了这样的场景:

2 people:
Juan
Gabriella

我想将 JuanGabriella 分组,这样我的正则表达式的结果如下所示:

匹配 0:2 人 第一组:胡安 第 2 组:加布里埃拉

我试过:

/^\d+\speople.*:$\n(.*)$\n/gm

结果是:

Match 0: 2 people
Group 1: Juan

我认为我们可以使用反向引用,但不确定在这种情况下如何使用它。

正则表达式:https://regexr.com/3k86r

更新:

正如评论所述,那样做不太可能,那么让 JuanGabriella 放在同一组中,然后将它们分开怎么样。

因此正则表达式现在将寻找 3 个连续的换行符来对项目 Juan\nGabriellaFoo\nBar\Bazz

进行分组

2 人: 娟 加布里埃拉

3 人: 福 酒吧 嗡嗡声

尝试过:

\d+\speople+:$([\s\S]*(?=\n{3,}))

https://regexr.com/3k888

最佳答案

So the regex will now look for 3 consecutive line breaks to group the items Juan\nGabriella and Foo\nBar\Bazz

你可以使用

/(?:^|\n)\d+\s*people:([\s\S]*?)(?=\n{3}|$)/

参见 regex demo

详情

  • (?:^|\n) - 字符串或 LF 的开头
  • \d+ - 1+ 位
  • \s* - 0+ 个空白字符
  • people: - 文字子串
  • ([\s\S]*?) - 第 1 组在第一个之前尽可能少地捕获任何 0+ 个字符...
  • (?=\n{3}|$) - 3 个连续的 LF 符号或字符串结尾。

JS 演示:

var rx = /(?:^|\n)\d+\s*people:([\s\S]*?)(?=\n{3}|$)/g;
var str = "2 people:\nJuan\nGabriella\n\n\n3 people:\nFoo\nBar\nBazz";
let m, res=[];
while (m=rx.exec(str)) {
  console.log(m[1].trim().split("\n"));
}

关于javascript - 带反向引用的正则表达式捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48613654/

相关文章:

python - python正则表达式中的贪婪反向引用?

javascript - D3 - 从外部文件读取更新数据后的转换

regex - 在 PostgreSQL 中匹配部分反向引用

javascript - 提交表单后未出现确认页面

r - 代入R中句子第N个词的模式

php - 如何替换上传文件文件名中的空格

regex - 在 Vim 的新选项卡中显示所有匹配的 grep 结果

javascript - JavaScript 正则表达式中的反向引用

javascript - 请求花费的时间太长 ~1s Node Express API(TTFB 问题)

javascript - 将调用者的引用添加到闭包构造函数中