смайлы для чата, замена текста
например есть строка:
привет #111# человек #011# как дела? #098# --------------- как вы уже наверное догадались, #111# #011# #098# - это смайлы, сами картинки храняться на сервере и имеют имена: 111.gif 011.gif 098.gif --------------- вопрос: каким образом используя JavaScript эти лексемы можно заменить на HTML код: <img src = 'путь/файл'> ? ? начал размышлять в сторону регулярных выражений: // патерн для смайлов ptn_s = /\#[0-9]{1,4}\#/g; // в этом массиве мы храним все смайлы из нашей строки smilesArray = data.match(ptn_s); подскажите пожайлуста, как можно закончить мысль с минимальными затратами ресурсов пользователя.. |
А зачем здесь JavaScript, заменять коды смайлов на <img> нужно на стороне сервера перед выдачей страницы клиенту. И такие коды для смайлов — бредовая идея, используйте привычные текстовые смайлы.
|
А зачем здесь JavaScript?
заменять коды смайлов нужно на стороне сервера перед выдачей страницы клиенту ------------------------ все дело в трафике, если с сервера будут приходить сообщения с сылкой, трафика рано или поздно уйдет больше чем этот кусок кода на стороне клиента... еще положительный момент, перед тем как выводить графику в окошко, все смайлы прокэшены и находяться в массиве JS PS: простые текстовые смайлы здесь не подходят |
str = '#123#'; str.replace('#', '').replace('#', '.gif'); Как у Вас сайт грузится? (ajax или просто так) В какой момент Вы хотите смайлы менять? |
спасибо, мысль понятна..
почемуто думал что str_replace работает только с регулярными выражениями :) оказывается еще и часть строки можно вставить. |
Цитата:
Цитата:
получилось что то вроде: ptn_s = /\#[0-9]{1,4}\#/g; smilesArray = data.match(ptn_s); if (smilesArray != null) { for (var n=0; n<smilesArray.length; n++) { data = data.replace(smilesArray[n], '<img src = \'' + smilesImgArray[smilesArray[n]].src + '\' border=0>'); } } и казалось бы работает - оно вери гуд!, и ошибок вроде не выдает, но кодеры - народ пытливый :) дело в том что в массиве smilesArray могут быть повторяющиеся элементы, из за этого replace может повториться ненужных N раз, в зависимости от количества этих дубликатов. не подскажете как удалить повторяющиеся элементы из массива средствами JS? |
Если я правильно понимаю, то в цикле Вы в replace уже подставляете строку, а не регулярное выражение, а раз это не регулярка, значит замена происходит только с одним элементом - с первым, из всех одинаковых.
Т.е., если я правильно разобрался, у Вас все выполняется ровно столько раз, сколько надо. Убрал, ерунду которую написал %) |
понял,
Snipe спасибо что обьяснил, теперь буду спокоен) |
прочитать дополнение успел,
во он оно че! логику понял, но почемуто RegExp.$1 у меня ничего не выводит( |
Цитата:
|
Часовой пояс GMT +3, время: 05:48. |