路径中有空格时,因为markdown需要encode空格的原因,会匹配失败
blackier opened this issue · 5 comments
blackier commented
Line 19 in a981f1b
如果图片路径有空格,比如 ![](t a/a.png)
,在markdown中需要encode空格,就变成了 ![](t%20a/a.png)
。这时候就会匹配失败,导致没法替换成功。
个人试着修改了下,简单的改成
// ![example](postname/example.jpg) --> {% asset_img example.jpg example %}
var regExp = RegExp("!\\[+?(.*?)\\]+?\\((" + fileName + "|" + fileName.replace(" ", "%20") + ')/(.+?)\\)', "g");
// hexo g
data.content = data.content.replace(regExp, "{% asset_img $3 $1 %}","g");
是可以成功的,希望作者能完善下这个的匹配。
blackier commented
然后我再测试发现,文件里有空格,也是有问题。需要改下最后的匹配格式,但如果文件名本身就有%20
,那么也会问题。但这个的概率感觉比空格的概率低。
data.content = data.content.replace(regExp, function(matchStr, group1, group2, group3){
var imgname = group3.replace("%20", " ");
return `{% asset_img "${imgname}" "${group1}" %}`;
}, "g");
yiyungent commented
收到,感谢你的贡献!最近比较忙(电脑都用不上),等下次有时间我再来更新下(好奇怪,我居然没收到这个issue通知),其实你可以直接pull request,然后我自己合并也行
blackier commented
收到,感谢你的贡献!最近比较忙(电脑都用不上),等下次有时间我再来更新下(好奇怪,我居然没收到这个issue通知),其实你可以直接pull request,然后我自己合并也行
呃主要是我不是搞js的,代码不多大致看得懂流程才学了下语法,就改了下,pr就不提了,等你后面修改吧。
tedcy commented
文件名里面有特殊符号都会有问题
根据https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript的建议
文件名用escapeRegex处理一下就可以解决问题了
function escapeRegex(string) {
return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
yiyungent commented
然后我再测试发现,文件里有空格,也是有问题。需要改下最后的匹配格式,但如果文件名本身就有
%20
,那么也会问题。但这个的概率感觉比空格的概率低。data.content = data.content.replace(regExp, function(matchStr, group1, group2, group3){ var imgname = group3.replace("%20", " "); return `{% asset_img "${imgname}" "${group1}" %}`; }, "g");
今天想起来写了个在线测试 demo (懒癌晚期),这个写法不行啊