如何从Markdown代码块字符串中提取指定代码内容?
提取被```包裹的目标字符串
针对你遇到的从各种带```标记的文本里精准提取console.log()这类内容的需求,你参考的这个正则方案其实已经能很好解决问题了,我再补充几个细节让它更适配不同场景:
首先看你用的核心正则:
var code = s.match(/```([^`]*)```/)[1]
这个逻辑很清晰:用```作为起始和结束标记,捕获中间所有不是的字符,刚好能把你要的console.log()`(不管前后有没有空格)抓出来。不过可以做几个小优化:
- 处理多匹配场景:如果文本里可能存在多个```包裹的块,直接用
match只会返回第一个结果。要是想提取所有匹配内容,可以加上全局标志g,再通过映射清理掉标记:// 提取所有被```包裹的内容,返回数组 var allCodes = s.match(/```([^`]*)```/g)?.map(item => item.replace(/```/g, '')) || []; - 清理前后空格:你的示例里有的
和内容之间带空格(比如console.log()),有的不带(console.log()```),如果想要纯console.log(),可以给捕获到的结果加个trim():var cleanCode = s.match(/```([^`]*)```/)[1].trim();
拿你的几个测试案例验证下:
- 对于
<pre><code>``` console.log() ``` Hello </code></pre>,捕获后trim就能得到干净的console.log() - 对于
<pre><code>Hello ```console.log()``` </code></pre>,同样能精准提取到目标内容
这个正则也能应对极端情况,比如中间出现单个(比如```console.log(test)```),因为它是以连续的```作为边界,单个不会触发结束匹配,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jefry Dewangga
相关产品推荐
相关产品推荐

