2013-12-09 132 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]; 
    } 
}