关于node js 正则匹配markdown 图片的坑

先说下场景,我想用正则匹配markdwon文件中的所有图片链接并返回

测试文件内容

# 测试
![image-20210301112347246](assets/image-20210301112347246.png)
![image-20210301135841577](assets/image-20210301135841577.png)
![image-20210301135841577](assets/image-1111111.png)
![image-20210301135841577](https://img2020.cnblogs.com/blog/1652001/202010/1652001-20201005161645036-1472277248.png)

匹配的正则表达式

/(?<=![.*]()(.+)(?=))/g

分别测试exec,matchAll,match

exec测试

为啥先测试这个,因为最开始我用的就是这个,最后返回结果跟我使用在线工具匹配的结果不一致,

测试代码

let content = fs.readFileSync('../test.md').toString();
let pattern = /(?<=![.*]()(.+)(?=))/g;
console.log('exec', pattern.exec(content));

结果

image-20210302105010299

明显不对

matchAll测试

let content = fs.readFileSync('../test.md').toString();
let pattern = /(?<=![.*]()(.+)(?=))/g;
//console.log('exec', pattern.exec(content));

console.log('matchAll', ...content.matchAll(pattern));

image-20210302105137450

更不对了

match测试

let content = fs.readFileSync('../test.md').toString();
let pattern = /(?<=![.*]()(.+)(?=))/g;
//console.log('exec', pattern.exec(content));
//console.log('matchAll', ...content.matchAll(pattern));
console.log('match', content.match(pattern));

image-20210302105248598

这次对了

原文地址:https://www.cnblogs.com/makalochen/p/14467834.html