具有反向引用的正则表达式捕获组

时间:2018-02-04 22:30:20

标签: javascript regex backreference

所以我试图用相当重复的模式解析一些文本文件,而正则表达式只会很好地完成工作。但偶然发现这种情况看起来像这样:

2 people:
Juan
Gabriella

我想将JuanGabriella分组,以便我的Regexp的结果如下:

匹配0:2人    第1组:胡安    第2组:Gabriella

我试过了:

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

结果是:

Match 0: 2 people
Group 1: Juan

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

Regexr:https://regexr.com/3k86r

更新

正如评论所述,它不太可能这样做,那么如何在同一组中使用JuanGabriella,然后将它们拆分。

因此,正则表达式现在会查找3个连续的换行符,以对项Juan\nGabriellaFoo\nBar\Bazz进行分组

2个人: 胡安 加布里埃拉

3个人: 富 酒吧 Bazz

尝试:

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

https://regexr.com/3k888

1 个答案:

答案 0 :(得分:1)

  

因此,正则表达式现在会查找3个连续的换行符,以对项Juan\nGabriellaFoo\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演示:

&#13;
&#13;
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"));
}
&#13;
&#13;
&#13;