Регулярные выражения и BackReference
Добрый день!
Задача собственно такая: Существует строка в HEX - 02 4b 3f 02 05 00 03 2a 01 07 ff 3f Надо выделить 6 групп 1ая - 4 байта - 02 4b 3f 02 2ая - 1 байт - 05 3ая - 1 байт - 00 4ая - 1 байт - 03 - это указывает на длину, сколько байт следующая группа 5ая - кол-во байт рассчитывается из 4ой группы 6ая -2 байта ff 3f Собственно само выражение (то что я могу сделать) /(\x02\x4b\x3f\x02)(.{1})(.{1})(.{1}) А вот дальше я хотел так (.{\4})(.{2}) Но тут надо еще это число 03 - HEX перевести в 10-ую сист... или так проглотит? Вот как то так.... Подскажите как решить... В общем хотелось бы как то одним выражением это решить. (почему то мне кажется что можно) Еще делал так: разбивал на префикс и суффикс... сначала искал первые 4 группы потом из массива вынимал 4ую группу переводил в 10ую сист. и составлял выражение-суффикс... и т.д. но как то не кошерно.. Заранее благодарен за советы :-) |
То что вы написали имеет лишь отдалённое сходство с regeхp и javascript .
Для чего вы хотите произвести данную операцию? Как то так, если какие ошибки - я не виноватый, мне спатеньки пора.
var str='02 4b 3f 02 05 00 03 2a 01 07 ff 3f';
var n=parseInt(str.slice(18,20),16)*3-1;
var arr=[
str.slice(0,11),
str.slice(12,14),
str.slice(15,17),
str.slice(18,20),
str.slice(21,21+n),
str.slice(22+n)
]
alert(arr.join('\n'));
//если очень хочется регулярку, то примерно такое убожество, в 10 раз медленнее наверняка:
var reg=new RegExp('(.{11}).(..).(..).(..).(.{'+n+'}).(.*)');
alert(reg.exec(str).join('\n'))
|
| Часовой пояс GMT +3, время: 02:46. |