2013-03-02 1 views
1

У меня есть строка, как [{abc,1},{eee,2},{fff,5,jjj},{kkk,9}]. Я хочу разбить эту цепочку с помощью цветочных брекетов. Выход должен быть,JavaScript: разделение запятой строки, но игнорирование цветочных фигурных скобок

abc,1 

eee,2 

fff,5,jjj 

kkk,9 

Мне нужно выяснить, нет ли элементов. Для вышеприведенного примера нет элементов 4

+2

Вы должны охватывать случаи, такие как '[{QWE, {RTY ВГД}}, и т.д.]'? – Eric

+0

Что вы подразумеваете под «* игнорированием цветочных фигурных скобок в кавычках»? Приведите несколько примеров. И покажи нам, что ты пробовал! – Bergi

+0

Эрик: Нет необходимости покрывать подобные случаи –

ответ

0

просто попробовать это

var x = '[{abc,1},{eee,2},{fff,5,jjj},{kkk,9}]'; 
var items = x.match(/\{[^{]*(?=\})/g); 
for (var i in items) items[ i ] = items[ i ].replace(/^\{/, ''); 
0

Вы можете попробовать заменить брекеты. Что-то вроде:

String.replace("{").replace("}").split(","); 

В качестве альтернативы, превратите его в объект json и проведите по его членам.

+0

Это даже не справедливо JSON. – nhahtdh

+0

Моя ошибка. Json на brainT момент. – SteveP

1

Производите регулярное выражение для удаления [, ], { и } символов.

var str = "[{abc,1},{eee,2},{fff,5},{kkk,9}]"; 
str = str.replace(/[\[\]{}]/g, ""); 

Рабочий пример: http://jsfiddle.net/72Kdd/

1
var a = "[{abc,1},{eee,2},{fff,5,jjj},{kkk,9}]".slice(2, -2).split('},{'); 
+1

+1, я предпочитаю ['slice'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/slice) в [' substr'] (https: // разработчик .mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substr), но afaik делает то же самое, что и мой, в гораздо меньшем количестве кода. –

0

Вот что я верю, что вы хотите.

var str = "[{abc,1},{eee,2},{fff,5},{kkk,9}]"; 

Array.prototype.map.call(// for each of 
    str // the string's 
     .match(/\{(.*?)\}(?:,(?=\s*{)|]$)/g), // matches to a certain pattern 
    function (e) { 
     return e.slice(1,-2); // take the middle chars 
    } 
); 
// Array ["abc,1", "eee,2", "fff,5", "kkk,9"] 

Примечание: Это даст "a{bc,1}" от {a{bc,1}} и "a{bc},1" из {a{bc},1} из взгляда вперед (?=\s*{) после проверки для запятой.

+0

Предпочитаю @ Ответ Назина над этим, если вы можете использовать ['split'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split), чтобы получить данных, а не 'match'ing для него, поскольку это больше кода и менее эффективен. Помните, что 'split' может принимать и RegExp. –