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