Помогите с регуляркой
Суть в том что есть набор координат оформленных таким образом:
Код:
{Задача состоит в том, что этот "объект" нужно переместить в пространстве по первым двум координатам. В общем должно получиться так: Код:
( "+(x*128-128*1)+" "+(y*128+768*1)+" 0 )Код:
( -128 768 0 )Код:
( 128 1280 0 )P.s. Пытался делать регуляркой, но не смог написать должного скрипта. |
Набор обязательно оформлен так? Просто если есть возможность поменять формат, то лучше привести его к формату json, тогда не придется возиться с регулярками, а будет простая работа с массивом.
|
Увы изначальный код задается программой, именно той, в которую нужно будет экспортировать. В общем я в той программе делаю базовые фигуры, а потом эти фигуры используются в моем скрипте(меняются их координаты) затем выдается итоговый код и получается узор, который потом я буду обрабатывать дальше.
Хотя мне будет достаточно скрипта, который допустим из <textarea> может выделить каждую строчку, допустим если бы была функция, допустим get_str(n) где n номер строки в textarea то можно каждую строчку обработать, а до этого я дошел. В общем если можно так сделать то наверное легче будет так.. |
Несколько реплейсов и получится json.
|
Трех должно хватить (а может даже и двух) - заменить все скобки, поставить запятые между скобками и между числами.
|
Грубовато но дееспособно
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,","));
|
И? Какаха вышла.
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,')
);
|
Прошу заметить, что после трех скобок текст такого вида:
Код:
C1A3WALL01 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 |
Так, я проблему решил.
Решил следующим путем: Написал функцию, которая возвращает значение строчки 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, время: 21:40. |