2015-11-13 60 views
0

我想從下面的文本的特定字符串文本特定的字符串:得到來自相隔下劃線

var str = "001AN_LAST_BRANCH_HYB_1hhhhh5_PBTsd_JENKIN.bin"; 

由此我必須得到以下字符串:「LAST」,「科」和「JENKIN」。我使用下面的代碼來獲得「JENKIN」;

var result = str.substr(str.lastIndexOf("_") +1); 

它會得到結果「JENKIN.bin」。我只需要「JENKIN」。 另外,輸入字符串str有時包含此「.bin」字符串。

+0

你可以試試REGEX,如果你真的想要一個特殊的模式 – Blag

+1

你在'_JENKIN.bin' –

回答

1

可以使用String.prototype.split由給定分隔爲一個字符串分割成一個數組:

var str = '001AN_LAST_BRANCH_HYB_1hhhhh5_PBTsd_JENKIN.bin'; 
 

 
var parts = str.split('_'); 
 
// parts is ['001AN', 'LAST', 'BRANCH', 'HYB', '1hhhhh5', 'PBTsd', 'JENKIN.bin']; 
 

 
document.body.innerText = parts[1] + ", " + parts[2] + " and " + parts[6].split('.')[0];

+0

中找不到JENKINS,最後一個我認爲是 – Blag

1

這取決於模式是如何預測的是。如何:

var parts = str.replace(/\..+/, '').split('_'); 

然後份[0]是001AN,份[1]是LAST等

+0

你在想str.split('。')[ 0] .split( '_')?就我個人而言,我不喜歡讓這樣的函數調用[0]的想法,感覺很脆弱,但無論漂浮在你的船上。 –

+0

...似乎我回復的評論被刪除...只是證明我使用正則表達式時,並非絕對必要 –

1

嘗試使用String.prototype.match()RegExp/([A-Z])+(?=_B|_H|\.)/g匹配接着"_B""_H"或任何數目的大寫字母"."

var str = "001AN_LAST_BRANCH_HYB_1hhhhh5_PBTsd_JENKIN.bin"; 
 
var res = str.match(/([A-Z])+(?=_B|_H|\.)/g); 
 
console.log(res)

2

使用substring()函數,您可以通過定義開始和結束位置來提取需要的文本。你已經找到了起始位置str.lastIndexOf("_") +1,並添加結束位置str.indexOf(".") substring()函數會給你你需要的結果。

var result = str.substring(str.lastIndexOf("_") +1,str.indexOf(".")); 
+1

儘管此代碼塊可能回答OP的問題,但如果解釋如何以及如何解決此問題,此答案將更有用爲什麼這個代碼與問題中的代碼不同,以及爲什麼在不引入其他代碼的情況下解決問題。 – Mifeet

+0

只是根據您的要求添加說明 –

1

我不知道你爲什麼要這樣做,但這個例子會有幫助。

最好寫下你想要的東西。

str = '001AN_LAST_BRANCH_HYB_1hhhhh5_PBTsd_JENKIN.bin' 

find = ['LAST', 'BRANCH', 'JENKINS'] 

found = [] 

for item in find: 
    if item in str: 
     found.append(item) 

print found # ['LAST', 'BRANCH'] 
1

你能做到這一點的方法:

var re = /^[^_]*_([^_]*)_([^_]*)_.*_([^.]*)\..*$/; 
var str = "001AN_LAST_BRANCH_HYB_1hhhhh5_PBTsd_JENKIN.bin"; 
var matches = re.exec(str); 

console.log(matches[1]); // LAST 
console.log(matches[2]); // BRANCH 
console.log(matches[3]); // JENKIN 

這樣你可以重用你希望你的正則表達式任何時候,它可以在其他語言中也可以使用。