Показать сообщение отдельно
Старый 18.02.2010, 12:24
Ануб вне форума Посмотреть профиль Отправить личное сообщение для Ануб Найти все сообщения от Ануб
  № 1  
Ответить с цитированием
Ануб

Регистрация: Nov 2007
Сообщений: 28
По умолчанию Проблема с регуляркой

Имею обрабатываемый отрезок xml:

Код:
<fresult t="9">
<i>
{exp3}
</i>
<i>
{m5}
</i>
<i>
{lvl2|str}
</i>
<i>
{skill3|1}
</i>
</fresult>
Алгоритм обработки:

Код AS3:
var i:int;
var txt:String = '<b>Результаты боя:</b>\n\n';
 
for (i=0;i<_xml.fresult.children().length();i++) {
	txt += '\n\n- '+_xml.fresult.children()[i].toString();
}
 
txt = txt.replace(/\{exp([0-9]+?)\}/,'Очков опыта получено: $1');
txt = txt.replace(/\{m([0-9]+?)\}/,'Монет получено: $1');
 
var lvl_reg:RegExp = /\{lvl([0-9]+?)\|(str|spd|agi)\}/;
var lvl_matches:Array = txt.match(lvl_reg);
if (lvl_matches) {
	var lvl_p:Array = new Array();
	lvl_p['str'] = 'сила';
	lvl_p['spd'] = 'скорость';
	lvl_p['agi'] = 'ловкость';
	txt = txt.replace(lvl_reg,'Вы перешли на '+lvl_matches[1]+'й уровень, '+lvl_p[lvl_matches[2]]+' увеличена на 1');
}
 
var skill_reg:RegExp = /\{skill([0-9]+?)\|([0-9]+?)\}/;
var skill_matches:Array = txt.match(skill_reg);
if (skill_matches) {
	var s:Object = Main.skillInfo(skill_matches[1],skill_matches[2]);
	txt = txt.replace(skill_reg,'Изучен навык: '+s.n+' (уровень '+skill_matches[2]+')');
}
В большинстве случаев на выходе всё нормально и мы имеем следующий текст:

Код:
Результаты боя:


- Очков опыта получено: 3

- Монет получено: 5

- Вы перешли на 2й уровень, сила увеличена на 1

- Изучен навык: Мастер блокировки (уровень 1)
Но изредка (примерно каждый 15й-20й случай) на выходе нет двух последних пунктов:

Код:
Результаты боя:


- Очков опыта получено: 3

- Монет получено: 5
Что сделал не так, что нужно исправить? Спасибо заранее.