Помогите с регуляркой
Суть в том что есть набор координат оформленных таким образом:
Код:
{ Задача состоит в том, что этот "объект" нужно переместить в пространстве по первым двум координатам. В общем должно получиться так: Код:
( "+(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, время: 20:38. |