2016-05-13 54 views
0

我有一个看起来像这样的网址:如何使用JavaScript提取此网址的一部分?

http://localhost/assets/upload/img/hw6dNDBT-36x36.jpg

我想提取hw6dNDBT.jpg,从上面的网址。

我试着玩正则表达式模式/img\/.*-/但 匹配img/hw6dNDBT-

我该如何在JavaScript中做到这一点?

+1

你能展示你的代码吗?你很近(你只需要一个捕获组),但看到你现有的代码将使我们能够更具体地回答。 –

+0

你需要让你的正则表达式在img部分不选择,但仍然匹配。我知道它可能虽然不记得如何。除此之外,您还可以使用带有索引函数的分割函数来查找'img /',然后再拉取所有内容。 –

+1

路径总是以'.jpg'结尾,并且/或者它总是包含'-36x36'?这些数字会长短不一吗? – WillardSolutions

回答

1

试试这个:

var url = 'http://localhost/assets/upload/img/hw6dNDBT-36x36.jpg'; 
 
var filename = url.match(/img\/(.*)-[^.]+(\.[^.]+)/).slice(1).join(''); 
 
document.body.innerHTML = filename;

0

我会用split()方法:

var str = "http://localhost/assets/upload/img/hw6dNDBT-36x36.jpg"; 
var strArr = str.split("/"); 
var size = strArr.length - 1; 
var needle = strArr[size].split("-"); 
var fileTypeArr = strArr[size].split("."); 
var name = needle[0]+"."+fileTypeArr[fileTypeArr.length-1]; 

name现在应该是你搜索的字符串到目前为止,它不包含任何/里面

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

0

/[^\/]+$/应匹配网址中最后一个/后面的所有字符,这似乎是您想要匹配的内容。

0

没有正则表达式:

//this is a hack that lets the anchor tag do some parsing for you 
var parser = document.createElement('a'); 
parser.href = 'http://localhost/assets/upload/img/hw6dNDBT-36x36.jpg'; 

//optional if you know you can always trim the start of the path 
var path = parser.pathname.replace('/assets/uploads/'); 
var parts = path.split('/'); 
var img = ''; 

for(var i=0; i<parts.length; i++) { 
    if (parts[i] == 'img') { 
     //since we know the .jpg always follows 'img/' 
     img = parts[i+1]; 
    } 
} 
0

啊,你是如此接近!你只需要采取你的正则表达式,并使用捕获组,然后再添加更多!

img\/(.*)-.*(\..*) 

所以,你可以使用这种方式:

var result = /img\/(.*)-.*(\..*)/.exec(); 
var filename = result[1] + result[2]; 

老实说捕捉.jpg,是有点过分,如果你知道他们都将是JPG图片,你可能只取出正则表达式的后半部分。

因为您想知道,为什么我们使用result[1]result[2]?因为result[0]存储整个匹配,这是你回来的。捕获的群体,这是我们创建当我们使用括号,后0

0

这里存储的索引是一些一行代码:

var myUrl = 'http://localhost/assets/upload/img/hw6dNDBT-36x36.jpg', 
    myValue = myUrl.split('/').pop().replace(/-(?=\d).[^.]+/,''); 

我们采取一切后,最后一个斜线再砍出尺寸部分。