问题:
从CDN地址中提取图像文件名,类似于以下内容:
https://cdnstorage.api.com/v0/b/my-app.com/o/photo%2FB%_2.jpeg?alt=media&token=4e32-a1a2-c48e6c91a2ba
两阶段解决方案:
我使用两个正则表达式来检索文件名:
var postLastSlashRegEx = /[^\/]+$/,
preQueryRegEx = /^([^?]+)/;
var fileFromURL = urlString.match(postLastSlashRegEx)[0].match(preQueryRegEx)[0];
// fileFromURL = "photo%2FB%_2.jpeg"
问题:
有没有办法可以合并两个正则表达式?
我尝试过使用捕获群,但还没有能够制作出有效的解决方案。
答案 0 :(得分:1)
来自我的评论
您可以使用前瞻来查找“?”并使用[^/]
匹配任何非斜杠字符。
要删除对需要“?”的URL的依赖性,可以使前瞻匹配为问号或行尾指示符(由$
表示),但要确保第一个glob是非贪婪。
答案 1 :(得分:0)
您不必使用正则表达式,只需使用split和substr。
var str = "https://cdnstorage.api.com/v0/b/my-app.com/o/photo%2FB%_2.jpeg?alt=media&token=4e32-a1a2-c48e6c91a2ba".split("?")[0];
var fileName = temp.substr(temp.lastIndexOf('/')+1);
但如果正则表达式对您很重要,那么:
str.match(/[^?]*\/([^?]+)/)[1]
答案 2 :(得分:0)
使用substring方法的代码如下所示 -
var fileFromURL = urlString.substring(urlString.lastIndexOf('/') + 1, urlString.lastIndexOf('?'))