2013-12-09 133 views
7

我知道有幾種方法可以分爲jQuery中的數組,但我有一個特殊情況: 如果我有,例如這兩個字符串:將字符串分割成兩個部分

"G09.4 What" 
"A04.3 A new Code" 

當我駁頭通過' '我可以簡單地選擇前面的代碼[0]什麼是G09.4。當我打電話[1]我得到的文本:What

但是,當我做同樣的與第二個字符串我得到[1]A,但我想找回A new Code

那麼我怎樣才能檢索每個字符串的代碼和單獨的文本?

+0

VAR中newstr = 「」;對於(var i = 1; i DutGRIFF

回答

14

使用

var someString = "A04.3 A new Code"; 
var index = someString.indexOf(" "); // Gets the first index where a space occours 
var id = someString.substr(0, index); // Gets the first part 
var text = someString.substr(index + 1); // Gets the text part 
+0

對不起,但不知何故,它不會在我的例子中工作:http://jsfiddle.net/aJZZw/1/ –

+1

修復它爲你:http://jsfiddle.net/aJZZw/2/ – RononDex

+0

@JohnSmith已經eddited我的答案,有一個小錯誤。更改了行'var text = someString.substr(index + 1);' – RononDex

6

您可以分割字符串,並推卸返回數組中的第一項。然後加入剩菜,例如

var chunks = "A04.3 A new Code".split(/\s+/); 
var arr = [chunks.shift(), chunks.join(' ')]; 

// arr[0] = "A04.3" 
// arr[1] = "A new Code" 
+2

我敢打賭,你去炸藥釣魚。這是過火的問題。 – Bitterblue

3

取而代之的空間拆分的字符串,使用indexOfslice組合:

var s = "A04.3 A new Code"; 
var i = s.indexOf(' '); 
var partOne = s.slice(0, i).trim(); 
var partTwo = s.slice(i + 1, s.length).trim(); 
2

您可以使用match()並捕獲你通過正則表達式需要什麼:

"G09.4 What".match(/^(\S+)\s+(.+)/) 
    // => ["G09.4 What", "G09.4", "What"] 

"A04.3 A new Code".match(/^(\S+)\s+(.+)/) 
    // => ["A04.3 A new Code", "A04.3", "A new Code"] 

正如你可以看到你想要的兩個項目在[1][2]返回的數組。

0

您可以獲取代碼,然後從原始字符串中將其刪除,從而使代碼和字符串都不帶代碼。

var originalString = "A04.3 A new Code", 
    stringArray = originalString.split(' '), 
    code, 
    newString; 

code = stringArray[0]; 
newString = originalString.replace(code, ''); 
1

這個怎麼樣:

function split2(str, delim) { 
    var parts=str.split(delim); 
    return [parts[0], parts.splice(1,parts.length).join(delim)]; 
} 

FIDDLE

或者更高的性能,試試這個:

function split2s(str, delim) { 
    var p=str.indexOf(delim); 
    if (p !== -1) { 
     return [str.substring(0,p), str.substring(p+1)]; 
    } else { 
     return [str]; 
    } 
}