Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Regexp для замены смайлов иконками (https://javascript.ru/forum/misc/15337-regexp-dlya-zameny-smajjlov-ikonkami.html)

Beck 22.02.2011 20:06

Regexp для замены смайлов иконками
 
;D;Dte;Dst ;D;D ;Dtest;D;D

Помогите из этой строки заменить на <img>, только те смайлы, которые я выделил жирным текстом.

Я не силен в регулярках, знаю, только самые основы, но их мне не хватает, чтобы справиться с этой задачей. :)

Хорошая литература по регуляркам в javascript приветствуется так же! :victory:

Aetae 22.02.2011 20:39

А мож не надо усложнять с двойной вложенностью? Накой она нужна?
Меняй тупо по одному - самый надёжный и простой вариант.
str=':D:Dte:Dst (:D)(:D) :Dtest(:D)(:D)(-_-)'
alert(str.replace(/\((:D|-_-)\)/g,'<img src="" alt="$1">'))


Можно конечно сделать как ты хочешь, но не нужно.

Beck 22.02.2011 21:05

Цитата:

Сообщение от Aetae (Сообщение 93575)
А мож не надо усложнять с двойной вложенностью? Накой она нужна?
Меняй тупо по одному - самый надёжный и простой вариант.
str=':D:Dte:Dst (:D)(:D) :Dtest(:D)(:D)(-_-)'
alert(str.replace(/\((:D|-_-)\)/g,'<img src="" alt="$1">'))


Можно конечно сделать как ты хочешь, но не нужно.

Блин, без скобок :), я скобки просто чтобы выделить поставил. Не знаю, как их еще выделить.

Исправил первый пост.

B@rmaley.e><e 22.02.2011 21:12

А на каком основании Вы их выделяли? Почему четверное ;D выделено,а первое - нет?

var str = ';D;Dte;Dst ;D;D ;Dtest;D;D';
alert( str.replace(/;D\b/gi, '<img />') )

Beck 22.02.2011 21:21

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 93581)
А на каком основании Вы их выделяли? Почему четверное ;D выделено,а первое - нет?

var str = ';D;Dte;Dst ;D;D ;Dtest;D;D';
alert( str.replace(/;D\b/gi, '<img />') )

Потому что так работает определение смайликов в скайпе. :)
Классно, только как теперь первый смайл запретить, если к нему прилегает какая-то буква или цифра или проще, если после него(их) нету пробела.

B@rmaley.e><e 22.02.2011 22:04

Первый ничем не отличается от четвертого (разве что перед последним стоит пробел).

Beck 23.02.2011 01:11

Это сложно сделать? Чтобы заменялись смайлы окруженные пробелом и чтобы заменялись смайлы на концах слов?

рони 23.02.2011 09:13

Beck,
Вариант
var str = ";D;Dte;Dst ;D;D ;Dtest;D;D" ;
 alert(str.replace(/;D(?=(;D)*(\s|$))/gi, '<img />') )

Beck 23.02.2011 11:49

Цитата:

Сообщение от рони (Сообщение 93636)
Beck,
Вариант
var str = ";D;Dte;Dst ;D;D ;Dtest;D;D" ;
 alert(str.replace(/;D(?=(;D)*(\s|$))/gi, '<img />') )

Ну вот, то что надо вроде. :)

Теперь попробую все остальные смайлы подставить в паттерн.

Update - Все пашет, пока как надо. +1 к карме, спасибо. ;)


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