代码之家  ›  专栏  ›  技术社区  ›  DaveNOTDavid

所有字符和空白字符的regex模式,直到出现双线中断

  •  1
  • DaveNOTDavid  · 技术社区  · 6 年前

    包含以下文本:

    ** First Header
    ------------------------------------------------------------
    
    (https://www.stackoverflow.com) Stack Overflow
    
    Description: Stack Overflow
    
    Google (https://www.google.com)
    
    Description: Google
    
    
    ** Second Header
    

    …如何使用与第二个头段匹配的regex模式(带有双行分隔符),以便输出如下:

    ** First Header
    ------------------------------------------------------------
    
    (https://www.stackoverflow.com) Stack Overflow
    
    Description: Stack Overflow
    
    Google (https://www.google.com)
    
    Description: Google
    

    使用以下regex(将第一个头与所有字符以及空格字符匹配,因此使用 \s \S 有了成功的regex文本,以及双行中断前的负面展望,我觉得我绝对走上了正确的道路:

    RegExp("\\*\\* First Header[\\s\\S]*?(\\r?\\n(?!\\r?\\n))")
    

    …但仅输出:

    ** First Header
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Wiktor Stribiżew    6 年前

    您可以使用

    /(\*\* First Header[\s\S]*?)(?:\r?\n){3}/
    

    或仅与JS Regex兼容

    /(\*\* First Header[^]*?)(?:\r?\n){3}/
    

    regex demo

    细节

    • (\*\* First Header[\s\S]*?) -第1组捕获:
      • \*\* First Header -文字 ** First Header 子串
      • [\s\S]*? -任何0+字符,尽可能少
    • (?:\r?\n){3} -出现三次可选CR,后跟LF字符(因此,匹配两个有效的空白行)。
        2
  •  0
  •   Kenneth Obando    6 年前

    解决方案可能是:

    RegEx("(\\*\\*[\\s\\S]*)(\\n\\n\\*\\*)")

    提取第一组。

    您可以在中看到示例 https://regex101.com/r/WPN83b/1

        3
  •  0
  •   oleedd    6 年前

    下一个regex将工作:

    /\*[^]+?(?=\s+\*)/

    RegExp("\\*[^]+?(?=\\s+\\*)")

    这是最短的路。