You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式提取Markdown链接中的HREF内容?

解决Markdown链接HREF提取的正则问题

嘿,我明白你遇到的问题了——你想从Markdown链接格式[TITLE](HREF)里精准提取出HREF部分,但之前的正则没达到预期,反而返回了](HREF)这类内容。咱们来一步步搞定它!

你的原有正则问题出在哪?

你用的/\[*\]\(.*?\)/里,\[*是匹配0个或多个左方括号,这就导致正则会跳过前面的标题部分,直接匹配到第一个],然后把](HREF)整个抓下来,这显然不是你想要的结果。

两种靠谱的解决方案

方案1:用正向预查直接匹配HREF

这种方式不需要捕获组,直接定位到](之后、)之前的内容:

const line = 'Markdown text [link title](/link/href/name.md#anchor)';
const res = line.match(/(?<=\]\().*?(?=\))/gm);
console.log(res); // 输出: ["/link/href/name.md#anchor"]
  • (?<=\]\():正向回顾断言,确保匹配内容紧跟在](之后
  • .*?:非贪婪匹配任意字符(避免匹配到多个链接的闭合))
  • (?=\)):正向前瞻断言,确保匹配内容在)之前

方案2:用捕获组同时获取标题和HREF

如果你之后可能需要用到链接标题,这种方式更灵活:

const line = 'Markdown text [link title](/link/href/name.md#anchor) 另一个链接[示例](https://example.com)';
const matches = line.matchAll(/\[(.*?)\]\((.*?)\)/gm);

for (const match of matches) {
  const linkTitle = match[1];
  const linkHref = match[2];
  console.log(`标题: ${linkTitle}, 链接: ${linkHref}`);
}
// 输出:
// 标题: link title, 链接: /link/href/name.md#anchor
// 标题: 示例, 链接: https://example.com

这里\[(.*?)\]\((.*?)\)里的两个捕获组,分别对应标题(match[1])和HREF(match[2]),用matchAll可以一次性处理文本里的所有链接。

特殊场景补充

如果你的链接HREF里包含转义的)(比如[title](link\)test.md)),非贪婪匹配.*?可能会提前终止,这时候可以把正则调整为/\[(.*?)\]\(([^)]*)\)/gm,用[^)]*匹配除了未转义)之外的所有字符,结果会更准确。

内容的提问来源于stack exchange,提问作者Franz Jsel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:20:10