【问题标题】:Extracting paragraphs containing a particular string from a group of paragraph having all paragraphs with same start and end从具有相同开头和结尾的所有段落的一组段落中提取包含特定字符串的段落
【发布时间】:2015-03-18 14:34:52
【问题描述】:

我需要从具有相同开头和结尾的所有段落的一组段落中提取包含特定字符串的段落

例如:在下面的文本中,所有段落的第一行都以“Thread”开头,最后一行以“Breadcrumb”开头,现在我只想提取那些包含“string_to_be_searched”的段落

 Thread 1398 (Thread name)
    data...
    Breadcrumb: some alpha numeric data

  Thread 1398 (Thread name)
    data...
    string_to_be_searched
    Breadcrumb: some alpha numeric data



  Thread 1398 (Thread name)
    data...
    Breadcrumb: some alpha numeric data

 Thread 1398 (Thread name)
    data...
    string_to_be_searched
    Breadcrumb: some alpha numeric data

 Thread 1398 (Thread name)
    data...
    Breadcrumb: some alpha numeric data

我已经使用正则表达式进行了尝试,但是当我在没有 g 选项的情况下尝试它时,它给了我前两个线程,当我使用 g 执行它时,它给了我前 4 个线程,而它应该只给我第二个和第三个线程。

var re = /(Thread[\s\S]*?sys_mlock[\s\S]*?Bread.*)/m; 

问题演示:https://regex101.com/r/nR3qG9/2

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以使用这个基于前瞻的正则表达式:

    /(\bThread ((?!\bBread)[\s\S])*string_to_be_searched((?!\bBread)[\s\S])*Bread.*)/g
    

    Updated Regex Demo

    ((?!\bBread)[\s\S])* 是这里的关键,这意味着匹配 0 个或多个字符(包括换行符)后面没有另一个 Bread 模式(您的结束块)。

    【讨论】:

    • 但它没有捕获也包含“string_to_be_searched”的第三段
    • 是的,它也在捕获它,您只需要使用g(全局)标志。查看更新的答案和演示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多