2013-12-09 4 views
7

Я знаю, что есть несколько способов разбиения массива в JQuery, но у меня есть особый случай: Если у меня есть, например эти две строки:Разбивает строку на две части

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

Когда я расколоть сначала ' ' Я могу просто выбрать код спереди с [0], что будет G09.4. И когда я называю [1] я получаю текст: What

Но когда я делаю то же самое со второй строки, я получаю за [1]A, но я хочу, чтобы получить A new Code.

Так как я могу получить для каждой строки код и отдельный текст?

+0

вар NewStr = ""; for (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 Редактировал мой ответ, имел небольшую ошибку. Изменена строка '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

Вместо разделения строки на пространстве, используйте комбинацию indexOf и slice:

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]; 
    } 
} 
Смежные вопросы