所以我试图用相当重复的模式解析一些文本文件,而正则表达式只会很好地完成工作。但偶然发现这种情况看起来像这样:
2 people:
Juan
Gabriella
我想将Juan
和Gabriella
分组,以便我的Regexp的结果如下:
匹配0:2人 第1组:胡安 第2组:Gabriella
我试过了:
/^\d+\speople.*:$\n(.*)$\n/gm
结果是:
Match 0: 2 people
Group 1: Juan
我认为我们可以使用反向引用,但不确定如何在这种情况下使用它。
Regexr:https://regexr.com/3k86r
更新
正如评论所述,它不太可能这样做,那么如何在同一组中使用Juan
和Gabriella
,然后将它们拆分。
因此,正则表达式现在会查找3个连续的换行符,以对项Juan\nGabriella
和Foo\nBar\Bazz
进行分组
2个人: 胡安 加布里埃拉
3个人: 富 酒吧 Bazz
尝试:
\d+\speople+:$([\s\S]*(?=\n{3,}))
答案 0 :(得分:1)
因此,正则表达式现在会查找3个连续的换行符,以对项
Juan\nGabriella
和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"));
}
&#13;