gpt4 book ai didi

Javascript Regex匹配我数组中的表情符号

转载 作者:行者123 更新时间:2023-11-29 14:43:21 24 4
gpt4 key购买 nike

我有这个数组,其中包含每个 emo 路径的 emo 符号和关联的图像文件。

Working demo of my code on JSFIDDLE

但使用此代码时,仅 :) 此 emo 返回正确的 smile.png 图像,但 emo 的其余部分无法正常工作。

如何编写与每个符号匹配的正确正则表达式并为每个 emo 选择合适的文件?

 //Replace Emo with images
function replaceEmoticons(text) {
var emoticons = {
':)' : 'smile.png',
': )' : 'smile.png',
':D' : 'laugh.png',
':->' : 'laugh.png',
':d' : 'laugh-sm.png',
':-)': 'smile-simple.png',
':p': 'tounge.png',
':P': 'tounge-lg.png',
': P': 'tng1.png',
'>-)': 'evil.png',
':(': 'sad.png',
':-(': 'sadd.png',
':-<': 'sadd.png',
':-O': 'surprise.png',
':O': 'sur2.png',
':o': 'sur3.png',
':-o': 'sur3.png',
':-*': 'kiss.png',
':*': 'kiss.png',
':-@': 'angry.png',
':@': 'angry.png',
':$': 'con2.png',
':-$': 'con1.png',
'O.o': 'con2.png',
'o.O': 'con2.png',
':/': 'weird.png',
':x': 'x.png',
':X': 'x.png',
':!': 's.png',
'(:I': 'egg.png',
'^.^': 'kit.png',
'^_^': 'kit.png',
';)': 'wink.png',
';-)': 'wink.png',
":')": 'hc.png',
":'(": 'cry.png',
"|-O": 'yawn.png',
"-_-": 'poke.png',
":|": 'p1.png',
"$_$": 'he.png'

}, url = "images/emo/";
// a simple regex to match the characters used in the emoticons
return text.replace(/[:\-)D]+/g, function (match) {

return typeof emoticons[match] != 'undefined' ?
'<img class="emo" src="'+url+emoticons[match]+'"/>' :
match;
});
}


replaceEmoticons("Hi this is a test string :) with all :P emos working :D");

最佳答案

这个正则表达式:

 [:\-)D]+

与您列表中的许多表情符号不匹配。 :\-)D 以外的任何字符都将防止它被识别。

如果您有一个要匹配的字符串列表,您可以通过转义每个字符串并使用 | 将它们连接在一起,轻松构建一个正则表达式来匹配它们中的任何一个(而不是其他)。像这样:

// given a string, return the source for a regular expression that will 
// match only that exact string, by escaping any regex metacharacters
// contained within.
RegExp.escape = function(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

// build a regex that will match all the emoticons. Written out, it looks
// like this: /:\)|: \)|:D|:->|:d|:-\)|:p|:P|..../g
var emoticonRegex =
new RegExp(Object.keys(emoticons).map(RegExp.escape).join('|'), 'g');

然后用它代替你的正则表达式:

return text.replace(emoticonRegex, function (match) { ...

关于Javascript Regex匹配我数组中的表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com