2015-04-01 17 views
1

我必須從消息中的字符串中獲取圖像的名稱。我不得不類型字符串:如何從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

回答

1

嘗試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"] 
1

下面的代碼將同時滿足兩個條件。

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

var arr = str.split(" ") 

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

假設你的文件名不有空格的話,我想你可以用一個正則表達式做它只是文件擴展名:

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

這將返回數組與文件名。

1

問題出在你的正則表達式中。缺少g標誌以獲取所有匹配項。

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

雖然如果名稱中有空格,則不起作用。 如果你真的想把這些名字放在同一個字符串中,你可以用join(" ")得到數組。

相關問題