|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2009
Сообщений: 357
|
одновремменная замена нескольких рег. выражений
для замены в строке можно использовать String.replace(pattern,repl), где pattern может быть строкой или рег. выражением, а repl - строкой или функцией. можно ли за один проход replace сделать несколько замен? в php pattern может быть массивом. есть ли какое-нить решение для as3?
|
|
|||||
Modus ponens
|
Нет, учитесь писать нормальные регекспы, чтобы не надо было делать в несколько заходов - то, что есть в PHP - бред сивого мерина.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Mar 2009
Сообщений: 357
|
присоединяюсь к вопросу.
|
|
|||||
Guest
Сообщений: n/a
|
Вот первое, что пришло на ночь глядя
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); |
|
|||||
Modus ponens
|
Вариант номер раз, самый простой и удобный:
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);
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 06.04.2010 в 03:22. |
|
|||||
Регистрация: Mar 2009
Сообщений: 357
|
wvxvw, первый вариант мне показался слишком громоздким. проще 2 раза вызвать replace. вопрос по второму варианту. как обработать строку
|
|
|||||
передаем в этот метод параметр:
Но строка должна быть, например "Коля потратил %zzz% на %aaa% яблок" Делаем регулярку... Нафиг регулярку, делаем просто: Теперь можно пройтись ципклом и все элементы с четным индексом заменить: ИМХО самый гибкий вариант |
|
|||||
Modus ponens
|
expl:
Если извесно, что есть всего 2 переменные, которые надо заменить, и что они всегда идут в одинаковом порядке - то мой второй вариант будет ну, если не быстрее, то по крайней мере раза в 3 короче. В то время как первый вариант заменит подстроки в любой последовательности и любом количестве. loover: Проще, но однозначно в 2 раза дольше. Почему вариант в две с половиной строчки вам кажется громоздким - мне, наверное не понять Ваш вопрос "по второму варианту" откровенно поставил меня в тупик - а что же тогда делат код приведенный выше?
__________________
Hell is the possibility of sanity |
|
|||||
Guest
Сообщений: n/a
|
2 expl, ну и придумал) У меня как раз диплом по защите программ, включу в обфускацию)
2 wvxvw: функция реально громоздкая – вот вариант в одну строчку: |
Часовой пояс GMT +4, время: 18:58. |
|
« Предыдущая тема | Следующая тема » |
Теги |
или |
|
|