javascript - 使用正则表达式替换javascript中的情绪字符

标签 javascript jquery regex

我有以下 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>'
}

现在要用给定文本中的跨度替换情感,我正在使用以下函数

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 :( :(");

查看两个情感 Angular 色之间的空间。 但是,如果我删除了两种情绪之间的空间,那么它就不起作用了。如下所示

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

我的正则表达式有问题,但我无法弄清楚。

最佳答案

/:-?[()pPdD]/gi

[]括号内的字符是可能的,按顺序剩余

关于javascript - 使用正则表达式替换javascript中的情绪字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24221175/

相关文章:

javascript - 用于数组搜索的正则表达式通配符

c# - 从字符串中检索文本的正则表达式

javascript - ajax调用后如何退出循环

javascript - 变量未写入数组 - Javascript

javascript - 在 Vuetify 中折叠展开的 v-data-table 时触发方法

javascript - 悬停时向左滑动图像(jQuery),如果没有悬停则向后滑动

javascript - 使用jquery打开和关闭div

javascript - jquery Slide 的 for 步骤方法

javascript - 使用 Class 而不是 ID(通过 CLASS 而不是 ID 获取元素)

regex - R 正则表达式错误 :java. lang.NoSuchMethodException 中的 Mallet:给定参数没有合适的方法