编写匹配Lemmy剧透标签的JavaScript正则表达式问题
解决方案
针对Lemmy剧透标签的JavaScript正则匹配需求,修正后的正则表达式可以处理多行内容、带格式文本及含冒号的内容:
/:::\sspoiler\s+(?<title>.+)\n(?<body>(?:.|\n)*?)\n:::/gms
关键修改说明
- 模式标志:
g:全局匹配文本中的所有剧透标签(若有多个)m:多行模式,确保行尾换行符的判断准确s:启用dotAll模式,让.可以匹配换行符
- body组匹配逻辑:
(?<body>(?:.|\n)*?):使用非贪婪匹配(*?)捕获所有内容(包括换行),直到遇到单独一行的:::结束标签,避免提前终止匹配
- 结束标签匹配:
\n:::明确匹配单独一行的结束标记,不会误匹配内容中的冒号或部分类似字符
匹配验证
该正则可正确处理所有测试示例:
- 单行剧透内容:
title组捕获"title of the spoiler",body组捕获"content" - 多行带Markdown格式的内容:完整捕获跨换行的文本及加粗格式
- 含冒号的内容:不会因body中的
colon:提前终止匹配
原正则的问题
原表达式:::\sspoiler\s+(?<title>.+)\n(?<body>.+)\n:::的核心缺陷:
.+默认不匹配换行符,无法捕获多行body内容- 没有启用非贪婪匹配,即使修改匹配换行也可能过度匹配到后续内容
内容的提问来源于stack exchange,提问作者Kacper Wyczawski
相关产品推荐
相关产品推荐

