用于所有字符和空格字符的正则表达式模式,直到双行中断

时间:2019-02-07 17:43:03

标签: javascript regex google-apps-script

带有以下文本:

** First Header
------------------------------------------------------------

(https://www.stackoverflow.com) Stack Overflow

Description: Stack Overflow

Google (https://www.google.com)

Description: Google


** Second Header

...如何使用正则表达式模式匹配直到第二个标头带有双换行符,所以输出如下:

** First Header
------------------------------------------------------------

(https://www.stackoverflow.com) Stack Overflow

Description: Stack Overflow

Google (https://www.google.com)

Description: Google

使用以下正则表达式(将第一个标头与所有字符以及空格字符匹配,因此将\s\S与后续的正则表达式文字一起使用,并且将double用作负数换行),我觉得自己绝对是对的:

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

...但仅输出:

** First Header

3 个答案:

答案 0 :(得分:1)

您可以使用

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

或仅与JS正则表达式兼容

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

请参见regex demo

详细信息

  • (\*\* First Header[\s\S]*?)-第1组捕获:
    • \*\* First Header-文字** First Header子字符串
    • [\s\S]*?-任意0个以上的字符,尽可能少
  • (?:\r?\n){3}-出现三个可选CR,后跟LF字符(因此,匹配两个空白行)。

答案 1 :(得分:0)

下一个正则表达式将起作用:

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

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

这是最短的方法。

答案 2 :(得分:0)

解决方案可能是:

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

提取第一组。

您可以在https://regex101.com/r/WPN83b/1

中看到示例