关于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));
结果
明显不对
matchAll测试
let content = fs.readFileSync('../test.md').toString();
let pattern = /(?<=\!\[.*\]\()(.+)(?=\))/g;
//console.log('exec', pattern.exec(content));
console.log('matchAll', ...content.matchAll(pattern));
更不对了
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));
这次对了