原文链接:https://waynegong.cn/posts/8598.html
在使用 markdown 的超链接语法 [text](link)
时,无法支持 <a></a>
标签的其他属性(例如 target
、rel
)
所以希望将现有用 markdown 链接语法的内容批量替换成 <a></a>
标签
通过正则表达式 (?<!!)\[(.*?)\]\((.*?)\)
即可完成匹配,其中 $1
分组为链接文字, $2
分组为链接地址。
整个正则表达式分为三部分:
(?<!!)
向后否定断言,表示不匹配以 !
开始的内容,避免误伤到 markdown 的图片语法 ![text](img src)
;\[(.*?)\]
匹配 markdown 链接语法的前半部分 [text]
,并将结果保存到 $1
分组;\((.*?)\)
匹配 markdown 链接语法的前半部分 (link)
,并将结果保存到 $2
分组;const str = `balabala![img](https://path.to.img) balabala [text](http://path.to.link) balabala`;
const reg = /(?<!!)\[(.*?)\]\((.*?)\)/ig;
const result = str.replace(reg, `[$1]($2)`);
console.log(result);