2013-11-15 18 views
0

我從平均價格網頁獲得的字符串是這樣的:我該如何更改數組中的字符串?

~/TestImages/media/9.jpg?width=443&height=388&ext=.jpg?id=92, 
~/TestImages/media/8.jpg?width=506&height=337&ext=.jpg?id=91, 
~/TestImages/media/jpeg-3.jpg?width=720&height=480&ext=.jpg?id=75, 
~/TestImages/media/4.jpg?width=725&height=483&ext=.jpg?id=77, 
~/TestImages/media/7.jpg?width=957&height=629&ext=.jpg?id=81, 
~/TestImages/media/10.jpg?width=478&height=356&ext=.jpg?id=85, 

每個人都有一個換行符「\ r \ n」,但..

想創建只是URL的數組(即「/TestImages/media/9.jpg」)。

嘗試:

$.ajax({ 
     url: url, 
     success: function(data){ 
      var str = data.replace(/(\r\n|\n|\r)/gm,""), 
       imgArray = new Array, 
       tdata = str.split(","); 

      // make random order 
      for(var i=0; i < 13; i++){ 
       var randomNumber = Math.floor(Math.random()*tdata.length); 
       imgArray.push(tdata.splice(randomNumber,1)); 
      } 
      $.each(imgArray, function(i, item) { 
       var tmp = ""; 
       tmp = item[0].match(/~(.*?)\.jpg/g, "$1");     
       item[0] = tmp; 
      }); 

     } 
    }); 

沒多少希望改變陣列內的值..任何人有辦法做到這一點?

回答

1

這似乎做這項工作:

var s = "~/TestImages/media/9.jpg?width=443&height=388&ext=.jpg?id=92, \ 
~/TestImages/media/8.jpg?width=506&height=337&ext=.jpg?id=91, \ 
~/TestImages/media/jpeg-3.jpg?width=720&height=480&ext=.jpg?id=75, \ 
~/TestImages/media/4.jpg?width=725&height=483&ext=.jpg?id=77, \ 
~/TestImages/media/7.jpg?width=957&height=629&ext=.jpg?id=81, \ 
~/TestImages/media/10.jpg?width=478&height=356&ext=.jpg?id=85"; 

var sa = s.split(","); 
for(var i=0; i < sa.length;i++) { 
    var first = sa[i].indexOf("/"); 
    var last = sa[i].indexOf("?"); 
    sa[i] = sa[i].substring(first, last); 
} 

console.log(sa); 

你可以用這個玩代碼在這裏:http://jsbin.com/ePevaWos/1/edit?js,console

+0

這工作完美! – Dennis

1
var arr = $.map(data.split(','), function(s) { 
    return s.trim().split('?').shift(); 
}); 

FIDDLE

0


$就({ 網址:網址, 成功:功能(數據){ VAR STR = data.replace(/ [\ r \ n])的/ g,「」),//刪除所有換行符 tdata = str.split(「,」), imgArray = [];

 $.each(tdata, function(i, item) { 
      var match = item.match(/~(.*?)\.jpg/)[1]; 
      imgArray.push(match); 
     }); 

     //shuffle now if desired 
    } 
}); 

您可能還可以只寫:

var imgArray = data.match(/~(.*?)\.jpg/g); 

http://jsfiddle.net/pDD5G/

-2

爲什麼不直接使用字符串split,而不是正則表達式?

for (var i = 0;i < imgArray.length; i++) { 
    imgArray[i] = imgArray[i].split('?')[0]; 
} 
0

Se docsjQuery.each

Javascript沒有引用,因此,當您迭代它時,您無法更改數組元素的值。

所以,你所要做的就是創建另一個數組,而迭代,值壓入它:

var dst = []; 
$.each(imgArray, function(i, item) { 
    dst.push(item[0].match(/~(.*?)\.jpg/g, "$1")[1]); 
}); 
相關問題