背景
在使用 markdown 的超链接语法 [text](link)
时,无法支持 a
标签的属性(例如 target
、rel
)
所以希望将现有用 markdown 链接语法的内容批量替换成 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);