Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式替换javascript中的情感字符_Javascript_Jquery_Regex - Fatal编程技术网

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

使用正则表达式替换javascript中的情感字符,javascript,jquery,regex,Javascript,Jquery,Regex,我有以下JavaScript代码 var emoticons = { ':)': '<span class="emoticon emoticon_smile"></span>', ':-)': '<span class="emoticon emoticon_smile"></span>', ':(': '<span class="emoticon emoticon_sad"></span>',

我有以下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>'
}
现在,上面的代码运行良好。如果我在函数中传递文本,如下所示

Emotions("Hey this is a test :( :(");
查看两个角色之间的空格。 但是如果我去掉两种情绪之间的空间,那么它就不起作用了

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

我的正则表达式有问题,但我无法解决。

当你删除空格时,你的整个情感序列
:(:(
与你的模式
/[:\-)(D/pPy@'*]+/
(作为一个单独的序列)匹配。因为没有与
:(:(
)相关的跨度,所以不会返回任何内容

你应该找到一种方法来界定你的字符序列(例如,在你的模式前面添加一个空格,如
/[:\-)(D/pPy@'*]+/
,但别忘了在你的跨度前面添加一个空格)


[]方括号中的字符是posibilite,按顺序保留

表达式无法判断“:(:)应被视为两个“块”,因为“:(:()完全满足您的正则表达式
模式

例如,如果您知道所有表情符号都以冒号(:)开头,则可以使用以下表达式检查表情符号“块”


:[\-)(D/pPy@'*]+
(冒号现在位于字符类前面)

尝试将正则表达式更改为


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

使用此表达式搜索,您的代码将正常工作


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

顺便说一句,您可以使用:
返回表情符号[match]| | match;
。是的,它确实可以工作。当我写我的答案时,我没有注意到所有表情符号都以
开头。不过,这会匹配:------D“这将导致一个不必要的函数调用,因为没有与该字符序列相关的表情符号;)这只是一个情绪样本。列表中还有其他情绪,它们也不是以@VimalPatel开头的:@VimalPatel,只要它们都以冒号开头,就可以了。破折号(-)作为星号(*)是可选的 indicates@VimalPatel你必须以某种方式定义如何解析你的情绪。它们可以从
开始,也可以用空格分隔,但如果你根本没有设置任何规则,我看不出你如何在字符串中分离不同的情绪,例如
:)(酷)
(这就是为什么我会在回答中使用空格)。但它也只能匹配一种情感,而不是两者都匹配。@VimalPatel绝对正确。我忘记了结尾
g
。它应该是
/[:\-)(D/pPy'*]+/g
,或者更好(就像其他答案一样),
/:[\-)(D/pPy'*]对于未来的答案,请考虑O+G/<代码:请概述OP在解决问题时出错之处,并概述您实际做出的更改,而不是编写一些代码并留给未来的访问者来确定到底是什么问题。它使得答案更有用,并且在这种情况下甚至阻止了您的回答。蚂蚁。
Emotions("Hey this is a test :(:(");
/:-?[()pPdD]/gi