首頁>Program>source

我有一个陣列:

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

然後我的文字有可變性。

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

和帶有網站網址的變數

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

如何編寫將符號替換為其圖像的函式?

<img> 標簽結果應為:

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

(我必须將var變數連線到圖片的名稱)。

非常感谢您!

最新回復
  • 5月前
    1 #

    另一種方法:

    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"/>"
    

    Edit: @ pepkin88提出了一个非常好的建議,根据 emoticons的屬性名稱構建正則表達式 物件。

    這很容易做到,但是如果我们希望它能够正常工作,就必须轉義元字元。

    轉義的模式儲存在陣列中,以後用於使用 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 :)');
    

  • 5月前
    2 #

    for ( smile in emoticons )
    {
       text = text.replace(smile, '<img src="' + url + emoticons[smile] + '" />');
    }
    

  • 5月前
    3 #

    使用帶有查詢替換元素陣列的正則表達式效果很好。

    var emotes = [
        [':\\\)', 'happy.png'],
        [':\\\(', 'sad.png']
    ];
    function applyEmotesFormat(body){
        for(var i = 0; i < emotes.length; i++){
            body = body.replace(new RegExp(emotes[i][0], 'gi'), '<img src="emotes/' + emotes[i][1] + '">');
        }
        return body;
    }
    

  • matlab:使用双線性插值調整圖像大小,而無需調整大小
  • objective c:在iOS上使用和訪問現有的SQLite資料庫