求匹配不在```代码块内的HTML注释的正则表达式
解决方案
要匹配不在```代码块内的HTML注释,得跟踪代码块的开闭状态,不能只检查单行是否有反引号。以下是可行的正则表达式(需支持PCRE语法,开启DOTALL模式):
(?s)(?:^(?!```)|(?!^)\G(?!```))(?:(?!```|<!--).)*\K<!--[\s\S]*?-->
正则说明
(?s):开启DOTALL模式,让.能匹配换行符,处理跨多行内容(?:^(?!```)|(?!^)\G(?!```)):锁定代码块外的位置:^(?!```):行开头且不是代码块起始标记(?!^)\G(?!```):从上一次匹配结束的位置继续,且当前不是代码块起始标记
(?:(?!```|<!--).)*:匹配代码块外的任意内容,直到遇到代码块标记或HTML注释\K:重置匹配起点,只保留后面的HTML注释作为匹配结果<!--[\s\S]*?-->:匹配完整的HTML注释(非贪婪模式避免跨多个注释)
注意事项
- 若用Python标准库
re模块,需替换为第三方regex库(标准re不支持\G的连续匹配逻辑) - 该正则会自动跳过所有被```包裹的代码块内部的HTML注释,只匹配代码块外的注释
内容的提问来源于stack exchange,提问作者acoudouy
相关产品推荐
相关产品推荐

