所以我正在尝试解析一些具有相当重复模式的文本文件,而正则表达式会很好地完成这项工作。但是偶然发现了这样的场景:
2 people:
Juan
Gabriella
我想将 Juan
和 Gabriella
分组,这样我的正则表达式的结果如下所示:
匹配 0:2 人 第一组:胡安 第 2 组:加布里埃拉
我试过:
/^\d+\speople.*:$\n(.*)$\n/gm
结果是:
Match 0: 2 people
Group 1: Juan
我认为我们可以使用反向引用,但不确定在这种情况下如何使用它。
正则表达式:https://regexr.com/3k86r
更新:
正如评论所述,那样做不太可能,那么让 Juan
和 Gabriella
放在同一组中,然后将它们分开怎么样。
因此正则表达式现在将寻找 3 个连续的换行符来对项目 Juan\nGabriella
和 Foo\nBar\Bazz
2 人: 娟 加布里埃拉
3 人: 福 酒吧 嗡嗡声
尝试过:
\d+\speople+:$([\s\S]*(?=\n{3,}))
最佳答案
So the regex will now look for 3 consecutive line breaks to group the items
Juan\nGabriella
andFoo\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/