2014-08-28 60 views
0

我試圖去抓,看起來像一個字符串的一部分「A_1234_5678,B_2345_678,C_3456_78」在列表項的第一部分是一個類別,並在第一後的部分下劃線是我需要的某種形式的數據(3456_78或3456 78)。子串的特定字符後不同長度的

他們總是在相同的順序,但並不總是存在。 例如,它也可以看起來像「A_1234_5678,C_3456_7890」。但是讓我們假設我需要C_後的數據。它始終是相同的順序,但並不總是列表中的相同索引。而且,數據並不總是相同的長度。所以數據的長度是不一樣的,它的起始索引也不相同。

有沒有辦法做到這一點?最好是javascript,所以我可以在<script>的網站中使用它。我看了split,substr,並嘗試過indexOf等。

回答

0

當然。我會使用正則表達式來消化。

var stringToParse = 'C_3456_7890'; 
var returnArray = stringToParse .match(/^([A-Z])_([0-9_]*)$/); 

這將在數組的索引1的類別信,並在索引2的數據應該只要類別總是一個大寫字母和指數只有數字和下劃線的工作。如果你讓我知道更多有關可能的選項,我可以更新我的迴應

編輯

,以幫助一個以上的項目列表中,你應該把它拆分的逗號第一

var stringToTest = "A_1234_5678, B_2345_678, C_3456_78" 
var arrayOfStrings = stringToTest.split(',') 
for (var i = 0; i<arrayOfStrings.length; i++){ 
    var returnArray = arrayOfStrings[i].match(/^\s*([A-Z])_([0-9_]*)\s*$/); 
    console.log(returnArray); 
} 

用您需要用來處理數據和類別的任何代碼替換控制檯日誌,您將會很好。

第二編輯

代碼的建議,在循環使用:

if (returnArray[1] == 'C'){ 
    var foundData = returnArray[2]; 
    break; 
} 

所以完整的代碼會看起來像

var stringToTest = "A_1234_5678, B_2345_678, C_3456_78" 
var arrayOfStrings = stringToTest.split(',') 
var foundData = false; 
for (var i = 0; i<arrayOfStrings.length; i++){ 
    var returnArray = arrayOfStrings[i].match(/^\s*([A-Z])_([0-9_]*)\s*$/); 
    if (returnArray[1] == 'C'){ 
    foundData = returnArray[2]; 
    break; 
    } 
} 
console.log(foundData !== false ? foundData : 'Sorry, no matching index found!') 

然後你可以把這個成函數並將所需的類別作爲參數。延伸的功能

0
function getByCategory(data, category) { 
    return data.split(',').map(function(x) { 
     return x.trim(); 
    }).filter(function(y) { 
     return y.indexOf(category) === 0; 
    }).shift().replace(category + '_', ''); 
} 

用作

var data = getByCategory('A_1234_5678, B_2345_678, C_3456_78', 'B'); //2345_678 

FIDDLE

相關問題