Замените список эмотиконов с их изображениями

У меня есть массив с:

emoticons = {
   ':-)' : 'smile1.gif',
   ':)'  : 'smile2.gif',
   ':D'  : 'smile3.gif'     
}

затем у меня есть variabile с текстом.

var text = 'this is a simple test :)';

и переменная с URL веб-сайта

var url = "http://www.domain.com/";

Как записать функцию, которые заменяют символы их изображениями?

<img> результат тега должен быть:

<img src="http://www.domain.com/simple2.gif" />

(Я должен связать URL varible к названию изображения).

Большое спасибо!

14
задан Maksym Gontar 22 October 2011 в 18:01
поделиться

2 ответа

Другой подход:

function replaceEmoticons(text) {
  var emoticons = {
    ':-)' : 'smile1.gif',
    ':)'  : 'smile2.gif',
    ':D'  : 'smile3.gif'
  }, url = "http://www.domain.com/";
  // a simple regex to match the characters used in the emoticons
  return text.replace(/[:\-)D]+/g, function (match) {
    return typeof emoticons[match] != 'undefined' ?
           '<img src="'+url+emoticons[match]+'"/>' :
           match;
  });
}

replaceEmoticons('this is a simple test :)');
// "this is a simple test <img src="http://www.domain.com/smile2.gif"/>"

Изменить: @ pepkin88 сделал действительно хорошее предложение: создать регулярное выражение на основе имен свойств смайликов объект.

Это легко сделать, но мы должны избегать метасимволов, если хотим, чтобы это работало правильно.

Экранированные шаблоны сохраняются в массиве, который позже используется для построения регулярного выражения с помощью конструктора RegExp , в основном путем объединения всех шаблонов, разделенных метасимволом | .

function replaceEmoticons(text) {
  var emoticons = {
    ':-)' : 'smile1.gif',
    ':)'  : 'smile2.gif',
    ':D'  : 'smile3.gif',
    ':-|'  : 'smile4.gif'
  }, url = "http://www.domain.com/", patterns = [],
     metachars = /[[\]{}()*+?.\\|^$\-,&#\s]/g;

  // build a regex pattern for each defined property
  for (var i in emoticons) {
    if (emoticons.hasOwnProperty(i)){ // escape metacharacters
      patterns.push('('+i.replace(metachars, "\\$&")+')');
    }
  }

  // build the regular expression and replace
  return text.replace(new RegExp(patterns.join('|'),'g'), function (match) {
    return typeof emoticons[match] != 'undefined' ?
           '<img src="'+url+emoticons[match]+'"/>' :
           match;
  });
}

replaceEmoticons('this is a simple test :-) :-| :D :)');
33
ответ дан 1 December 2019 в 07:19
поделиться
for ( smile in emoticons )
{
   text = text.replace(smile, '<img src="' + url + emoticons[smile] + '" />');
}
4
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: