使用正则表达式替换javascript中的情感字符
我有以下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>',
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