带有以下文本:
** 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
答案 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)