Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с регуляркой (https://javascript.ru/forum/misc/9517-pomogite-s-regulyarkojj.html)

KOPCAP 21.05.2010 21:51

Помогите с регуляркой
 
Суть в том что есть набор координат оформленных таким образом:
Код:

{
( -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 768 0 )
Т.е. что делает скрипт: заменяет координату Х с -128 на "+(х*128-128*1)+" Для чего это нужно: будет программа-конструктор, на основе таблицы, где в каждой клетке можно задать узор, допустим треугольник или квадрат. Потом программа считывает координату этой клетки, и подставляет в Х или У в коде, допустим Х=2 У=4 тогда программа выдаст для той скобки код:
Код:

( 128 1280 0 )
Возможно я не понятно объяснил, спросите, где непонятно.
P.s.
Пытался делать регуляркой, но не смог написать должного скрипта.

SkyLight 21.05.2010 23:37

Набор обязательно оформлен так? Просто если есть возможность поменять формат, то лучше привести его к формату json, тогда не придется возиться с регулярками, а будет простая работа с массивом.

KOPCAP 22.05.2010 21:26

Увы изначальный код задается программой, именно той, в которую нужно будет экспортировать. В общем я в той программе делаю базовые фигуры, а потом эти фигуры используются в моем скрипте(меняются их координаты) затем выдается итоговый код и получается узор, который потом я буду обрабатывать дальше.
Хотя мне будет достаточно скрипта, который допустим из <textarea> может выделить каждую строчку, допустим если бы была функция, допустим get_str(n) где n номер строки в textarea то можно каждую строчку обработать, а до этого я дошел.
В общем если можно так сделать то наверное легче будет так..

Riim 23.05.2010 12:22

Несколько реплейсов и получится json.

SkyLight 23.05.2010 12:36

Трех должно хватить (а может даже и двух) - заменить все скобки, поставить запятые между скобками и между числами.

DooMer 25.05.2010 11:12

Грубовато но дееспособно

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,","));

e1f 25.05.2010 11:31

И? Какаха вышла.
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,')
);

KOPCAP 25.05.2010 19:56

Прошу заметить, что после трех скобок текст такого вида:
Код:

C1A3WALL01 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
Который тоже выводится, там есть квадратные скобки, они мешать не будут?

KOPCAP 25.05.2010 21:37

Так, я проблему решил.
Решил следующим путем:
Написал функцию, которая возвращает значение строчки 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 , а там было построчно. Все же спасибо всем за ваши ответы, узнал новое для себя;)


Часовой пояс GMT +3, время: 20:38.