Регулярные выражения и 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, время: 15:01. |