我正在尝试编写正则表达式(JS风格),以匹配文本中的剧透。
// this should match with group title = "title of the spoiler" and body = "content"
// and it's only one working for now :/
::: spoiler title of the spoiler
content
:::
// this should match
::: spoiler title
content
on multiple
lines
**with some style**
:::
// this should match
::: spoiler title
body
containing
colon:
:::
字符串
以下是我目前拥有的:
:::\sspoiler\s+(?<title>.+)\n(?<body>.+)\n:::
型
然而,它不匹配包含换行符的剧透,只有第一个例子是工作。
link到regex101.com
先谢了。
2条答案
按热度按时间umuewwlo1#
你可以使用这个正则表达式来获得正确的匹配:
字符串
Updated RegEx Demo
RegEx详情:
:::
:匹配开始:::
\s+
:匹配1+空格spoiler
:匹配文本spoiler
\s+
:匹配1+空格(?<title>.+)
:匹配名为title
的捕获组中任意字符的1+\n
:匹配换行符(?<body>.
:以字符开头的名为body
的捕获组(?:.*\n)+?
:匹配0或后跟换行符的任何字符,并重复该组1+次(惰性))
::::
匹配结束:::
7uhlpewt2#
您可以Assert,在匹配标题的单个非空白字符之后,接下来的行只有空白字符,直到匹配行首的
:::
。字符串
说明
:::
按字面意思匹配(如果必须在字符串的开头,则使用^:::
)\sspoiler\s+
匹配一个空白字符,然后spoiler
后跟1+个空白字符(?<title>\S.*)
命名组 title,匹配一个非空格字符,然后匹配该行的其余部分\n(?!\s*^:::)
匹配一个新行,并在一行的开头Assert直到:::
的空白字符(?<body>(?:.*\n)+?)
命名组 body,重复匹配所有行,尽可能少:::
按字面匹配Regex demo
或者对于JavaScript,
[^]
匹配包括换行符在内的任何字符:型
Regex demo的
注意
\s
也可以匹配换行符