2011-04-27 125 views
1

我有以下的JavaScript字符串varaible:分裂與子組串

var a = "1870|A00,1871|A01"; 

我想上面的字符串分成以下字符串:

var a1 = 1870,1871 
var a2 = A00,A01 

對此有何提示?

+0

這只是一個[splitting a string](http://stackoverflow.com/questions/96428/how-do-i-split-this-string-with-javascript)兩次,然後[加入一些數組](http://stackoverflow.com/questions/1353579/javascript-array-element-to-string)。不知道它是否重複,但非常接近。 – jball 2011-04-27 16:02:11

回答

1
var a = "1870|A00,1871|A01"; 

var b = a.split(',');  // split on the commas 
var a1 = [], a2 = [];  // temporary arrays 

// foreach of the substrings 
for (var i = 0; i < b.length; ++i) { 
    var c = b[i].split('|'); // split on the pipe char 
    a1.push(c[0]);   // and store the 
    a2.push(c[1]);   // two elements 
} 

a1 = a1.join(',');  // and reconstruct the 
a2 = a2.join(',');  // two strings 
2

要分割字符串,可以使用Javascript split method。 Split接受你想要分割的分隔符作爲參數,在你的情況下是逗號和管道。它返回在分隔符之前和之後找到的對象數組(它最終是一個數組,其大小比分隔符出現的次數要大)。

要將對象添加到數組中以建立a1和a2,請使用push。 Push將一個對象添加到數組的末尾。

要從兩個數組中分別用逗號分隔字符串,請使用join。連接接受一個數組並返回一個字符串,無論你的參數是分隔每個條目。

var a1 = []; 
var a2 = []; 
var firstGrouping = a.split(","); 
var firstGroupingLength = firstGrouping.length; 
for(var i = 0; i < firstGroupingLength; i++) { 
    var secondGrouping = firstGrouping[i].split("|"); 
    a1.push(secondGrouping[0]); 
    a2.push(secondGrouping[1]); 
} 
var a1String = a1.join(','); 
var a2String = a2.join(','); 

爲了概括上面的代碼,以允許在管周圍分組更多的物品(諸如輸入串var a = "1870|Z26|A00,1871|Z25|A01")代替a1和a2考慮被動態構造數組的數組。

+0

不要忘記'加入''a1'和'a2'。 – 2011-04-27 15:58:52

+0

@Alin - 添加了它。 – justkt 2011-04-27 16:03:50

0

下次嘗試Google時,請使用.split() - http://www.w3schools.com/jsref/jsref_split.asp方法。把你的字符串分割成像這樣的數組。

var a="1870|A00,1871|A01"; 
    var parts = a.split(","); 
+1

正確的文檔:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split – 2011-04-27 16:00:43

0
var a = "1870|A00,1871|A01" 

var splita = a.split(","); 

splita[0] = splita[0].split("|"); 
splita[1] = splita[1].split("|"); 

var a1 = [splita[0][0], splita[1][0]]; 
var a2 = [splita[0][1], splita[1][1]]; 
4
var a = "1870|A00,1871|A01"; 
var a1 = a.match(/\d+(?=\|)/g); 
var a2 = a.match(/\w\d+(?=,|$)/g); 

// a1 
// 1870,1871 
// a2 
// A00,A01 
+0

馬克:謝謝,我想完全像這樣。 – user569125 2011-04-27 19:05:27

0

這可以很容易使用正則表達式替換來實現。

var a1 = a.replace(/\|A[0-9]+/,""); 
var a2 = a.replace(/[0-9]+\|/,""); 

我還沒有嘗試過的代碼,但它應該工作。