如何编写正则表达式来捕获Last Slash和Query String之间的值?

时间:2017-04-19 14:01:48

标签: javascript regex

问题:

从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"

问题:

有没有办法可以合并两个正则表达式?

我尝试过使用捕获群,但还没有能够制作出有效的解决方案。

3 个答案:

答案 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('?'))