21.05.2010, 21:51
|
Интересующийся
|
|
Регистрация: 08.02.2009
Сообщений: 22
|
|
Помогите с регуляркой
Суть в том что есть набор координат оформленных таким образом:
Код:
|
{
( -128 -128 128 ) ( -128 768 128 ) ( 0 768 128 )
( -128 768 0 ) ( -128 -128 0 ) ( 0 -128 0 )
( -128 -128 0 ) ( -128 768 0 ) ( -128 768 128 )
( 0 768 0 ) ( 0 -128 0 ) ( 0 -128 128 )
( -128 768 0 ) ( 0 768 0 ) ( 0 768 128 )
( 0 -128 0 ) ( -128 -128 0 ) ( -128 -128 128 )
} |
После каждой из строче кроме { и } есть некоторый текст.
Задача состоит в том, что этот "объект" нужно переместить в пространстве по первым двум координатам. В общем должно получиться так:
Код:
|
( "+(x*128-128*1)+" "+(y*128+768*1)+" 0 ) |
Это только для одной скобки изначально она такая:
Т.е. что делает скрипт: заменяет координату Х с -128 на "+(х*128-128*1)+" Для чего это нужно: будет программа-конструктор, на основе таблицы, где в каждой клетке можно задать узор, допустим треугольник или квадрат. Потом программа считывает координату этой клетки, и подставляет в Х или У в коде, допустим Х=2 У=4 тогда программа выдаст для той скобки код:
Возможно я не понятно объяснил, спросите, где непонятно.
P.s.
Пытался делать регуляркой, но не смог написать должного скрипта.
|
|
21.05.2010, 23:37
|
|
Злюка-бобер
|
|
Регистрация: 21.03.2010
Сообщений: 438
|
|
Набор обязательно оформлен так? Просто если есть возможность поменять формат, то лучше привести его к формату json, тогда не придется возиться с регулярками, а будет простая работа с массивом.
__________________
In WEB We Trust
У всех есть своя темная сторона...
|
|
22.05.2010, 21:26
|
Интересующийся
|
|
Регистрация: 08.02.2009
Сообщений: 22
|
|
Увы изначальный код задается программой, именно той, в которую нужно будет экспортировать. В общем я в той программе делаю базовые фигуры, а потом эти фигуры используются в моем скрипте(меняются их координаты) затем выдается итоговый код и получается узор, который потом я буду обрабатывать дальше.
Хотя мне будет достаточно скрипта, который допустим из <textarea> может выделить каждую строчку, допустим если бы была функция, допустим get_str(n) где n номер строки в textarea то можно каждую строчку обработать, а до этого я дошел.
В общем если можно так сделать то наверное легче будет так..
Последний раз редактировалось KOPCAP, 22.05.2010 в 21:30.
|
|
23.05.2010, 12:22
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Несколько реплейсов и получится json.
|
|
23.05.2010, 12:36
|
|
Злюка-бобер
|
|
Регистрация: 21.03.2010
Сообщений: 438
|
|
Трех должно хватить (а может даже и двух) - заменить все скобки, поставить запятые между скобками и между числами.
__________________
In WEB We Trust
У всех есть своя темная сторона...
|
|
25.05.2010, 11:12
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
Грубовато но дееспособно
var stroka = "{\n( -128 -128 128 ) ( -128 768 128 ) ( 0 768 128 )\n( -128 768 0 ) ( -128 -128 0 ) ( 0 -128 0 )\n( -128 -128 0 ) ( -128 768 0 ) ( -128 768 128 )\n( 0 768 0 ) ( 0 -128 0 ) ( 0 -128 128 )\n( -128 768 0 ) ( 0 768 0 ) ( 0 768 128 )\n( 0 -128 0 ) ( -128 -128 0 ) ( -128 -128 128 )\n}";
alert(stroka);
alert(stroka.replace("{\n( ","[{").replace(" )\n}","}]").replace(/\n/gi,",").replace(/ \) \( /g,"},{").replace(/ \),\( /g,"},{").replace(/ /g,","));
|
|
25.05.2010, 11:31
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
И? Какаха вышла.
var str = "{\n( -128 -128 128 ) ( -128 768 128 ) ( 0 768 128 )\n( -128 768 0 ) ( -128 -128 0 ) ( 0 -128 0 )\n( -128 -128 0 ) ( -128 768 0 ) ( -128 768 128 )\n( 0 768 0 ) ( 0 -128 0 ) ( 0 -128 128 )\n( -128 768 0 ) ( 0 768 0 ) ( 0 768 128 )\n( 0 -128 0 ) ( -128 -128 0 ) ( -128 -128 128 )\n}";
alert(str);
alert(str.replace(/\(/g, '[').
replace(/\)/g, ']').
replace(/\]\s+\[/g, '],\n[').
replace(/([0-9.+-]+)(?=\s+([0-9.+-]+))/g, '$1,')
);
|
|
25.05.2010, 19:56
|
Интересующийся
|
|
Регистрация: 08.02.2009
Сообщений: 22
|
|
Прошу заметить, что после трех скобок текст такого вида:
Код:
|
C1A3WALL01 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 |
Который тоже выводится, там есть квадратные скобки, они мешать не будут?
|
|
25.05.2010, 21:37
|
Интересующийся
|
|
Регистрация: 08.02.2009
Сообщений: 22
|
|
Так, я проблему решил.
Решил следующим путем:
Написал функцию, которая возвращает значение строчки textarea:
function GetTAStr(num, obj){
objkt=document.getElementById(obj);
text=objkt.value;
text="\n"+text+"\n";
for(i=1; i<(num); i++){
text=text.replace("\n", "");
}
var reg = /\n[^(\n)]*\n/;
text=text.match(reg);
text=(text+"\n").replace("\n", "");
return(text);
}
где num - номер строки, а obj - id textarea.
В итоге я могу каждую строчку обрабатывать по отдельности, а к одной строчке у меня уже есть скрипт, т.к. раньше делал через осла, который понимает чтение файлов через activex , а там было построчно. Все же спасибо всем за ваши ответы, узнал новое для себя
|
|
|
|