2013-07-04 3 views
0

Я хочу разбить строку в двумерном массиве.Javascript split string в двумерном массиве

Мой массив как это:

var str = 'a) first sentence without fixed lenght b) second phrase c) bla bla bla' 

Возвращение массива, что мне нужно, как:

var arr =[ 
      [ 'a', 'first sentence without fixed lenght' ], 
      [ 'b', 'second phrase' ], 
      [ 'c', 'bla bla bla' ] 
     ]; 

Я думал об использовании регулярного выражения для нахождения индекса списка что-то вроде это:

/\w\)\s/gi 

, а затем разбить строку, но безуспешно. Кто-нибудь может мне помочь?

ответ

1

Хорошо вы можете сделать это с раздельным или матча. Я пошел на решение, не рассчитывая), всегда являясь разделителем. Вместо этого я ищу очень специфичный образец пробелов, букв,), пробелов в нулевом представлении. Поэтому наиболее вероятное использование круглых скобок, таких как «D» (шепоты) «будет в порядке [D), соответствует s) не].

var str = 'a) first sentence without fixed lenght b) second phrase c) bla bla bla'; 
var re = /(?=\s\w\)\s)/g; 
var myArray = str.split(re); 
var text; 
var parenIndex; 
// the result is = myArray[ 'a) first ...', 'b) second ... ', 'c) third ...' ]; 

for (var i = 0, il = myArray.length; i < il; i++) { 
    text = myArray[i]; 
    parenIndex = text.indexOf(')'); // get first instance of) 
    myArray[i] = [ text.substring(0, parenIndex - 1), text.substring(parenIndex + 1) ]; 
} 
// the result is = myArray[ ['a', 'first ...'], ['b', 'second ... '], ... ]; 

Проще менее надежный подход будет следующим. Он предполагает, что) всегда является делителем.

var str = 'a) first sentence without fixed lenght b) second phrase c) bla bla bla'; 
var re = /(?=\w\))|\)/g; 
var myArray = str.split(re); 
var newArray = new Array(myArray.length/2); 

for (var i = 0, il = myArray.length; i < il; i += 2) { 
    newArray[i/2] = [ myArray[i], myArray[i + 1] ]; 
} 
+1

Я пробовал ваш второй подход, он отлично работает, но в строке 3 правильный синтаксис: str.split (re); for: для (var i = 0 и есть близкая скобка для добавления в следующую строку ..;) Я добавил также trim(), когда я храню vars в массиве. – Danilo

+0

@ Данило: Спасибо за отзыв. –

+0

много шума в этой теме ... – dandavis

1

вот простой способ вытащить:

var ray= 'a) first sentence without fixed lenght b) second phrase c) bla bla bla' 
.split(/(\w)\) /) 
.slice(1) 
.map(function(a,b,c){if(b%2){ return [c[b-1],a] }}) 
.filter(Boolean); 

alert(JSON.stringify(ray, null, "\t")); 

    /* shows: 
[ 
    [ 
     "a", 
     "first sentence without fixed lenght " 
    ], 
    [ 
     "b", 
     "second phrase " 
    ], 
    [ 
     "c", 
     "bla bla bla" 
    ] 
] 
*/ 
Смежные вопросы