如何匹配以```包裹的内容,支持结尾```可选(仅在末尾)
正则匹配优化:捕获末尾未闭合的代码块内容
你可以将正则修改为合并两种场景的写法,避免拆分多个捕获组,让后续处理更简洁:
const pattern = /```([^`]+?)(?:```|$)/gm const data = "here is an exmaple```code1```here is an exmaple```code2```here is an exmaple```code3"
正则说明:
(?:```|$)是一个非捕获组,用来匹配两种终止条件:要么是闭合的```标记,要么是字符串的结尾- 合并后的写法只需要读取第一个捕获组
match[1]就能拿到所有目标内容,无需判断多个捕获组的有效性
对比你提到的拆分写法:
```([^`]+?)```|```([^`]+?)$
这种写法会生成两个独立的捕获组,匹配闭合内容时取第一个捕获组,匹配末尾未闭合内容时取第二个,处理逻辑相对繁琐。而合并后的正则将两种情况统一,代码处理更直观。
测试验证:运行下面的代码可以得到完整的匹配结果:
let match; const results = []; while ((match = pattern.exec(data)) !== null) { results.push(match[1]); } console.log(results); // 输出: ["code1", "code2", "code3"]
内容的提问来源于stack exchange,提问作者shawhu
相关产品推荐
相关产品推荐

