簡體   English   中英

使用正則表達式替換javascript中的情感字符

[英]Using regular Expression to replace emotions character in javascript

我有以下JavaScript代碼。

var emoticons = {
    ':)': '<span class="emoticon emoticon_smile"></span>',
    ':-)': '<span class="emoticon emoticon_smile"></span>',
    ':(': '<span class="emoticon emoticon_sad"></span>',
    ':d': '<span class="emoticon emoticon_bigSmile"></span>',
    ':D': '<span class="emoticon emoticon_bigSmile"></span>'
}

現在用給定文本中的span替換情感我正在使用以下函數

function Emotions (text) {
    if (text == null || text == undefined || text == "") return;
    var pattern = /[:\-)(D/pPy@'*]+/gi;
    return text.replace(pattern, function (match) {
        return typeof emoticons[match] != 'undefined' ?
           emoticons[match] :
           match;
    });
}

現在上面的代碼工作正常。如果我在函數中傳遞文本如下

Emotions("Hey this is a test :( :(");

看到兩種情緒之間的空間。 但如果我刪除兩種情感之間的空間,那么它就不起作用。如下所示

Emotions("Hey this is a test :(:(");

我的正則表達式有問題,但我無法弄明白。

/:-?[()pPdD]/gi

[]括號中的字符是posibilites並按順序保留

表達式不能說“:( :(”應該被視為兩個“塊”,因為“:( :(”完全滿足你的正則表達式pattern

例如,如果您知道所有表情符號都以冒號(:)開頭,則可以使用以下表達式來檢查表情符號“塊”

:[\\-)(D/pPy@'*]+ (冒號現在位於字符類前面)

當你刪除空格時,你的整個情感序列:(:(與你的模式匹配/[:\\-)(D/pPy@'*]+/ (作為單個序列)。由於沒有與之相關的范圍:(:(沒有任何回報。

你應該找到一種方法來划分你的角色序列(例如通過在你的模式前添加一個空格,如/ [:\\-)(D/pPy@'*]+/ ,但在這種情況下不要忘記添加在你的跨度前面的空間)。

嘗試將正則表達式更改為

var pattern = /:[\\-)(D/pPy@'*]+/gi;

使用此Expresion搜索和您的代碼將起作用

var pattern = /:[( - )dD] + / gi;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM