如何从JavaScript中可能有一个或多个图像的字符串中获取图像名称?

如何从JavaScript中可能有一个或多个图像的字符串中获取图像名称?

问题描述:

我必须从消息中的字符串中获取图像的名称。我不得不类型字符串:如何从JavaScript中可能有一个或多个图像的字符串中获取图像名称?

S1 = “血乳酸血乳酸name1.jpg血乳酸血乳酸name2.jpg血乳酸血乳酸”

S2 =“血乳酸血乳酸name1.jpg喇嘛喇嘛”

,我有2个问题:

一个函数里柯:

function getPhotoName(message){ 
      var photoRegex = /.* (.*jpe?g).*/i; // the extension may be jpg, jpeg, JPG and JPEG 
      return message.replace(photoRegex, "$1"); 
     } 

它返回正确的名称为s2情况下,为s1情况下,结果是第二个名称。

对于类型的函数:

function getPhotoName(message){ 
      var photoRegex = /.* (.*jpe?g).* (.*jpe?g).*/i; // the extension may be jpg, jpeg, JPG and JPEG 
      return message.replace(photoRegex, "$1"); 
     } 

结果是OK的情况下s1,但对于s2情况下,结果是名称和文本之前("bla bla name1.jpg")。

如何使这项工作?

+0

你有串组输出的控制?它可以让事情变得更容易(虽然你可能喜欢正则表达式:)),只需引入分隔符(如逗号),然后根据该分割字符串分割该字符串 – Modika 2015-04-01 09:55:41

+0

我控制getPhotoName的结果,但我不控制消息 – sop 2015-04-01 10:00:45

尝试match()

var names = "bla bla name1.jpg bla bla name2.jpg bla bla".match(/(\w+\.jpe?g)/gi) //["name1.jpg", "name2.jpg"] 
var names = "bla bla name1.jpg bla bla".match(/(\w+\.jpe?g)/gi)// ["name1.jpg"] 
var names = "bla bla image.JPEG bla bla".match(/(\w+\.jpe?g)/gi)// ["image.JPEG"] 

下面的代码将同时满足两个条件。

var str ="bla bla name1.jpg bla bla" 

var arr = str.split(" ") 

var obj = arr.filter(function(elem){ if(elem.indexOf(".")>-1) return true; }) 

假设你的文件名不有空格的话,我想你可以用一个正则表达式做它只是文件扩展名:

function getFileNames(str) { 
    return str.split(' ').filter(function(candidate) { 
     return !!candidate.match(/\.jpe?g$/i); 
    }); 
}; 

这将返回数组与文件名。

问题出在你的正则表达式中。缺少g标志以获取所有匹配项。

var jpegNames = /(\S+\.jpe?g)/gi 
s1.match(jpegNames) 
s2.match(jpegNames) 

虽然如果名称中有空格,则不起作用。 如果你真的想把这些名字放在同一个字符串中,你可以用join(" ")得到数组。