Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   смайлы для чата, замена текста (https://javascript.ru/forum/misc/2254-smajjly-dlya-chata-zamena-teksta.html)

brain 28.11.2008 02:07

смайлы для чата, замена текста
 
например есть строка:

привет #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);

подскажите пожайлуста, как можно закончить мысль с минимальными затратами ресурсов пользователя..

Octane 28.11.2008 02:47

А зачем здесь JavaScript, заменять коды смайлов на <img> нужно на стороне сервера перед выдачей страницы клиенту. И такие коды для смайлов — бредовая идея, используйте привычные текстовые смайлы.

brain 28.11.2008 10:53

А зачем здесь JavaScript?
заменять коды смайлов нужно на стороне сервера перед выдачей страницы клиенту
------------------------
все дело в трафике, если с сервера будут приходить сообщения с сылкой, трафика рано или поздно уйдет больше чем этот кусок кода на стороне клиента...

еще положительный момент,
перед тем как выводить графику в окошко, все смайлы прокэшены и находяться в массиве JS


PS: простые текстовые смайлы здесь не подходят

Snipe 28.11.2008 10:59

str = '#123#';
str.replace('#', '').replace('#', '.gif');


Как у Вас сайт грузится? (ajax или просто так)
В какой момент Вы хотите смайлы менять?

brain 28.11.2008 11:04

спасибо, мысль понятна..
почемуто думал что str_replace работает только с регулярными выражениями :)
оказывается еще и часть строки можно вставить.

brain 28.11.2008 20:34

Цитата:

Сообщение от Snipe (Сообщение 8962)
Как у Вас сайт грузится?

сообщения приходят аджаксом, после чего обрабатываються JavaScript и добавляются во фрейм сообщений методом InnerHTML

Цитата:

Сообщение от Snipe (Сообщение 8962)
В какой момент Вы хотите смайлы менять?

Смайлы меняем во время обработки сообщений JavaScriptom



получилось что то вроде:


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?

Snipe 28.11.2008 20:52

Если я правильно понимаю, то в цикле Вы в replace уже подставляете строку, а не регулярное выражение, а раз это не регулярка, значит замена происходит только с одним элементом - с первым, из всех одинаковых.

Т.е., если я правильно разобрался, у Вас все выполняется ровно столько раз, сколько надо.

Убрал, ерунду которую написал %)

brain 28.11.2008 20:57

понял,
Snipe спасибо что обьяснил, теперь буду спокоен)

brain 28.11.2008 21:28

прочитать дополнение успел,
во он оно че!

логику понял, но почемуто RegExp.$1 у меня ничего не выводит(

brain 28.11.2008 21:35

Цитата:

Сообщение от Snipe (Сообщение 8962)
Убрал, ерунду которую написал %)

а я уже обрадовался :D


Часовой пояс GMT +3, время: 05:48.