[英]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.