JS正则如何提取changelog中首个版本下的更新列表内容
问题原因
你之前写的正则存在语法逻辑错误:方括号[]内的规则是单字符集合匹配,[^(##)]本质是匹配非(、非#、非)的单个字符,根本无法实现识别##整个版本标记、截断后续版本内容的效果。
正确实现方案
用以下正则+逻辑即可精准提取第一个版本号对应的更新列表:
const changelog = ` ## 11.2.3 * xxx * xxxx ## 11.2.2 * ttt * ttt `; // 正则规则说明: // ^\s*##.*\n 匹配开头空白后第一个## 开头的版本标题行,匹配到该行末尾换行 // ([\s\S]*?) 非贪婪捕获标题行之后的所有内容(包含换行) // (?=\n## |$) 正向预查,匹配到下一个换行+## 的版本标记、或者字符串末尾就停止 const res = changelog.match(/^\s*##.*\n([\s\S]*?)(?=\n## |$)/); const final = res ? res[1].trim() : ''; console.log(final);
运行后输出结果完全符合预期:
* xxx * xxxx
适配说明
- 兼容changelog开头存在多余空行的场景
- 不管版本号是数字格式还是文本格式都能正常识别
- 自动在第二个版本块的标题处截断,不会混入后续版本内容
- 当changelog仅存在一个版本块时,也能正确匹配到内容末尾,不会出现匹配失败的问题
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

