带有以下文本:
** 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
与后续正则表达式文字的用法以及双换行符的否定提前)我绝对是在正确的轨道上:RegExp("\\*\\* First Header[\\s\\S]*?(\\r?\\n(?!\\r?\\n))")
...但仅输出:
** First Header
最佳答案
您可以使用
/(\*\* 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字符(因此,匹配两个空白行)。