
21.09.2010, 05:12
|
Новичок на форуме
|
|
Регистрация: 06.07.2010
Сообщений: 2
|
|
преобразование сложной строки в массив
Доброго времени суток всем
В общем то проблема вот в чем - от сервера приходит ответ(результат перемножения матриц), например
Как преобразовать эту строку в 2D массив
var arr = [[1, 2], [3, 6]]
Знаю про split, но какое рег. выражение туда записать?
ps: я сделал так: удалил крайние скобки, потом разбить по '][', а потом по ', '. Но может есть способ получше?
Последний раз редактировалось Rifler, 21.09.2010 в 05:27.
|
|

21.09.2010, 06:55
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,136
|
|
метод наверно не самый лучший но можно так:
<script type="text/javascript">
str='[1, 2][3, 6]';
eval('var arr=['+str.replace(/\]\[/g,'],[')+']');
document.write(arr[0][0]+' '+arr[0][1]+' '+arr[1][0]+' '+arr[1][1]);
</script>
Последний раз редактировалось B~Vladi, 21.09.2010 в 13:59.
Причина: language="JavaScript" зло
|
|

21.09.2010, 10:52
|
 |
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
либо так:
var data = '[1, 2][3, 6]';
var arr = (new Function('return [' + data.replace('][', '], [') + ']'))();
console.log(arr);
Выбирай 
Последний раз редактировалось B~Vladi, 21.09.2010 в 10:59.
|
|

21.09.2010, 13:47
|
Профессор
|
|
Регистрация: 21.01.2010
Сообщений: 1,022
|
|
var str = '[1, 2][3, 6]';
str = str.match(/\d+/g);
str = [ [str[0], str[1]], [str[2], str[3]] ]
alert( str );
|
|

21.09.2010, 13:53
|
Профессор
|
|
Регистрация: 14.12.2009
Сообщений: 155
|
|
Сообщение от Rifler
|
от сервера приходит ответ
|
Может быт стоит пересмотреть отклик серверной части, чтобы он выглядел так как надо?
|
|

21.09.2010, 14:06
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Я бы сделал как exec. Хотя по-уму with-love-from-siberia, конечно, прав.
|
|

21.09.2010, 14:09
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Парсить регулярками свои же данные -- бред.
|
|

21.09.2010, 14:36
|
 |
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
За то мой код без проблем сожмется 
|
|

21.09.2010, 17:36
|
Новичок на форуме
|
|
Регистрация: 06.07.2010
Сообщений: 2
|
|
with-love-from-siberia,
на сервере матрицы перемножаются на python'e вот так
с = a*b
и с сразу идет в ответ. Можно конечно крайние скобки обрезать там, но это не сильно облегчит задачу я думаю
Sweet,
Дело в том, что у exec код привязан к размеру матрицы 2х2
B~Vladi, у тебя тоже почему то работает только для размера 2х2, хотя так и не вкурил почему  Вроде все верно написано
зы: взял код рони, спасибо
|
|

21.09.2010, 19:34
|
Профессор
|
|
Регистрация: 14.12.2009
Сообщений: 155
|
|
Rifler, Вы
а) либо на сервере генерируйте правильные данные, чтобы клиентская часть "не задумывалась" о корректности данных,
б) либо корректируйте данные на клиенте, универсально, например:
var data = '[1, 2, 3][4, 5, 6][7, 8, 9]';
var arr = eval('[' + data.replace(/\]\[/g, '],[') + ']');
alert(arr.join('\n'));
|
|
|
|