我想知道是否可以获得字符串的这一部分。 这是我的字符串:
var string = "www.somesite.com/o/images%2Fc834vePyJ3SFVk2iO4rU0ke1cSa2%2F12391381_10205760647243398_2385261683139818614_n.jpg?alt=media&token=7a692a38-6982-474f-bea5-459c987ae575";
现在我希望能够抓住字符串的这一部分,即文件名:
12391381_10205760647243398_2385261683139818614_n.jpg
我试过了:
var result = /[^/]*$/.exec(""+url+"")[0];
,但会返回
user%2Fc834vePyJ3SFVk2iO4rU0ke1cSa2%2F12391381_10205760647243398_2385261683139818614_n.jpg?alt=media&token=4c92c4d7-8979-4478-a63d-ea190bec87cf
我的正则表达式错了。
另一个是,文件扩展名可以是.png或jpg,因此它不固定为jpg。
答案 0 :(得分:2)
您可以使用正则表达式来隔离所需的部分:
这有效:
var string = "www.somesite.com/o/images%2Fc834vePyJ3SFVk2iO4rU0ke1cSa2%2F12391381_10205760647243398_2385261683139818614_n.jpg?alt=media&token=7a692a38-6982-474f-bea5-459c987ae575";
console.log((string.match(/[A-Za-z0-9_]+.(jpg|png|bmp)/))[0].substring(2));

答案 1 :(得分:1)
请注意,可能需要根据URL字符串更改的数量进行调整:
var string = "www.somesite.com/o/images%2Fc834vePyJ3SFVk2iO4rU0ke1cSa2%2F12391381_10205760647243398_2385261683139818614_n.jpg?alt=media&token=7a692a38-6982-474f-bea5-459c987ae575";
var out = string.split('?')[0].split('%2F')[2];
console.log(out); // "12391381_10205760647243398_2385261683139818614_n.jpg"
答案 2 :(得分:1)
假设您总是有一个网址,首先我会通过以下方式解码编码的/
(%2F
)字符:
var string = "www.somesite.com/o/images%2Fc834vePyJ3SFVk2iO4rU0ke1cSa2%2F12391381_10205760647243398_2385261683139818614_n.jpg?alt=media&token=7a692a38-6982-474f-bea5-459c987ae575";
var decodedUrl = decodeURIComponent(string);
然后使用正则表达式:
decodedUrl.match(/[^/]*(?=[?])/)
请注意,这个正则表达式假定参数(以?...
开头的部分)存在,所以如果不是这样,您可能需要根据需要进行更改。
答案 3 :(得分:0)
如果文件名始终具有.jpg扩展名:
var url = decodeURIComponent(string);
var filename = url.substring(url.lastIndexOf("/")+1, url.lastIndexOf(".jpg"))
如果不是:
url = url.substring(url.lastIndexOf("/")+1)
filename = url.substring(0,url.indexOf("?"))
答案 4 :(得分:0)
查看字符串,看起来文件名介于第二次出现的“%2F”和第一次出现的“?”之间在字符串中。
第一步是在第二个“%2F”之前删除字符串的一部分。这可以通过在每个“%2F”处拆分字符串并在结果数组中取第三个元素来完成。
var intermediate = string.split("%2F")[2]
然后,我们需要在“?”之后摆脱一切:
var file_name = intermediate.split("?")[0]
这应该为您提供URL
中的文件名