Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.04.2010, 23:17
loover вне форума Посмотреть профиль Отправить личное сообщение для loover Найти все сообщения от loover
  № 1  
Ответить с цитированием
loover
 
Аватар для loover

Регистрация: Mar 2009
Сообщений: 357
По умолчанию одновремменная замена нескольких рег. выражений

для замены в строке можно использовать String.replace(pattern,repl), где pattern может быть строкой или рег. выражением, а repl - строкой или функцией. можно ли за один проход replace сделать несколько замен? в php pattern может быть массивом. есть ли какое-нить решение для as3?

Старый 05.04.2010, 23:23
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Нет, учитесь писать нормальные регекспы, чтобы не надо было делать в несколько заходов - то, что есть в PHP - бред сивого мерина.
__________________
Hell is the possibility of sanity

Старый 06.04.2010, 01:44
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 3  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Плохо, что не умею пользоваться. Извените.
Как обработать строку: "Коля потратил %coins% на %apples% яблок"?
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 06.04.2010, 02:09
loover вне форума Посмотреть профиль Отправить личное сообщение для loover Найти все сообщения от loover
  № 4  
Ответить с цитированием
loover
 
Аватар для loover

Регистрация: Mar 2009
Сообщений: 357
присоединяюсь к вопросу.

Старый 06.04.2010, 02:55
  № 5  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Вот первое, что пришло на ночь глядя
Код AS3:
var str:String = "Коля потратил %coins% на %apples% яблок"
trace(str);
var reg:RegExp = /%coins%|%apples%/g;
var coins:String = "100 рублей";
var apples:int =50;
var res:Array;
while(res=reg.exec(str)){
	var repl:String;
	switch(res[0]){
		case "%coins%": repl = coins; break;
		case "%apples%": repl = apples.toString(); break;
	}
	str = str.substr(0, reg.lastIndex-res[0].length)+repl+str.substr(reg.lastIndex,str.length);
	reg.lastIndex -=(res[0].length-repl.length);
}
trace(str);

Старый 06.04.2010, 03:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вариант номер раз, самый простой и удобный:
Код AS3:
var s:String = "Коля потратил %coins% на %apples% яблок";
var re0:RegExp = /%\w+%/g;
s = s.replace(re0, reHelper);
function reHelper(match:String, index:int, all:String):String
{
	switch (match)
	{
		case "%coins%":
			return "$100";
		case "%apples%":
			return "5";
	}
	return match;
}
trace(s);
Код AS3:
var re1:RegExp = /(%coins%)(.*)(%apples%)/g;
var s1:String = "Коля потратил %coins% на %apples% яблок";
s1 = s1.replace(re1, "$$100$25");
trace(s1);
Вариант не универсальный, но от задачи зависит.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 06.04.2010 в 03:22.
Старый 06.04.2010, 21:23
loover вне форума Посмотреть профиль Отправить личное сообщение для loover Найти все сообщения от loover
  № 7  
Ответить с цитированием
loover
 
Аватар для loover

Регистрация: Mar 2009
Сообщений: 357
wvxvw, первый вариант мне показался слишком громоздким. проще 2 раза вызвать replace. вопрос по второму варианту. как обработать строку
Код AS3:
var s1:String = "Коля потратил zzz на aaa яблок";

Старый 06.04.2010, 21:49
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
передаем в этот метод параметр:
Код AS3:
parametr = {
    zzz:100,
    aaa:25
}
Но строка должна быть, например "Коля потратил %zzz% на %aaa% яблок"
Делаем регулярку... Нафиг регулярку, делаем просто:
Код AS3:
    var array:Array = s1.split("%");
Теперь можно пройтись ципклом и все элементы с четным индексом заменить:
Код AS3:
    for(...
        if (index % 2 == 0)
        {
            array[index] = parametr[array[index]]
        }
     ...
     var text:String = array.join("");//Наша строчка "Коля потратил 100 на 25 яблок"
ИМХО самый гибкий вариант

Старый 06.04.2010, 23:02
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
expl:
Если извесно, что есть всего 2 переменные, которые надо заменить, и что они всегда идут в одинаковом порядке - то мой второй вариант будет ну, если не быстрее, то по крайней мере раза в 3 короче.
В то время как первый вариант заменит подстроки в любой последовательности и любом количестве.

loover:
Проще, но однозначно в 2 раза дольше. Почему вариант в две с половиной строчки вам кажется громоздким - мне, наверное не понять Ваш вопрос "по второму варианту" откровенно поставил меня в тупик - а что же тогда делат код приведенный выше?
__________________
Hell is the possibility of sanity

Старый 06.04.2010, 23:40
  № 10  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
2 expl, ну и придумал) У меня как раз диплом по защите программ, включу в обфускацию)
2 wvxvw: функция реально громоздкая – вот вариант в одну строчку:
Код AS3:
function reHelper(match:String, index:int, all:String):String{switch (match){case "%coins%": return "$100";	case "%apples%":  return "5";}return match; }

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
или

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.