在标题后捕获多行文本

时间:2019-07-19 06:19:05

标签: javascript regex

我试图做一个正则表达式,以便我可以在特定的Header之后获得文本。标头后各行的数字是随机的。 Header2和Header3的名称也是未知的。
事实是,我只需要捕获Header1之后的文本,因为在其他标头之后也有类似的文本,我们不应该捕获。
我正在尝试以下方法:

Header1\n(?:\s{4}(.+\:\s+.*)){1} //Captures -->  a:   fileAa2
Header1\n(?:\s{4}(.+\:\s+.*)){2} //Captures --> b:   fileB-
Header1\n(?:\s{4}(.+\:\s+.*)){3} //Captures --> cb:  fileCl

但是我必须手动更改花括号之间的数字...所以也许您可以帮助我找到更好的方法,文本如下:

Header1
    ab:  fileAa2
    b:   fileB-
    cb:  fileCl
    ab:  fileD'
    b:   fileFn
Header2
    ab:  fileAa2
    a:   .file2
    ab:  file3/a
    a:   file4
    x:   file5
Header3
    LL
    pkg
    e
    f

我要归档的目标是使用一个带有match或exec的正则表达式来创建如下数组:

[ab:  fileAa2,  b:   fileB-, cb:  fileCl, ab:  fileD', b:   fileFn]

之后,我将通过前缀过滤数据,如下所示:

[fileAa2, fileD']
[fileB-, fileFn]
[fileCl]

请欢迎任何建议

2 个答案:

答案 0 :(得分:0)

您可以查看以下内容:Header1\n(((.+?:\s+.+?)\n)+)(例如here

给出以下文字:

Header1
    ab:  fileAa2
    b:   fileB-
    cb:  fileCl
    ab:  fileD'
    b:   fileFn
Header2
    ab:  fileAa2
    a:   .file2
    ab:  file3/a
    a:   file4
    x:   file5
Header3
    LL
    pkg
    e
    f

它应该匹配:

ab:  fileAa2
b:   fileB-
cb:  fileCl
ab:  fileD'
b:   fileFn

表达式基本上会寻找Header1之后的所有:对。具有标题的名称会破坏此模式,因此表达式将返回您想要的内容(丢弃其余内容)。

答案 1 :(得分:0)

使用此正则表达式(我想出了此方法,并使用了npinti的演示页进行了测试,谢谢)

Header1\n((\s.+\n)+\s.+[^\n])

您可以将Header1Header2的{​​{1}}更改,它也将起作用。

此外,即使要匹配的行位于您要处理的末尾,即使没有最后的换行符,这也可以使用。

假定行要匹配
以空格(Header3)开头
以换行符(\s.+)结尾,
可能多次(\n),
最后一行从空白(+开始) 但结尾不是换行符(\s.+)。

最后一位避免匹配到下一个标头(以字母开头而不是空白),并且如果它是目标标头的一部分,则获得最后一行。