Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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中的emojies列表_Javascript_Jquery_Regex_Replace - Fatal编程技术网

替换JavaScript中的emojies列表

替换JavaScript中的emojies列表,javascript,jquery,regex,replace,Javascript,Jquery,Regex,Replace,我有一个表情符号列表,如: var emojies = ["smile", "smiley", "grin", "joy"]; 我想用一个函数检测并替换:emoji\u name:,例如,如果文本是:Hi guys!:smile:,用替换:smile:,我想正则表达式可以解决这个问题,但是,怎么做呢?加入你的数组并创建一个正则表达式,然后你可以使用replace和回调函数(或者像sln的答案一样使用单行替换)来创建跨度 注意:假设所有表情符号的名称都在: var emojies = ["smi

我有一个表情符号列表,如:

var emojies = ["smile", "smiley", "grin", "joy"];

我想用一个函数检测并替换
:emoji\u name:
,例如,如果文本是:Hi guys!:smile:,用
替换
:smile:
,我想
正则表达式
可以解决这个问题,但是,怎么做呢?

加入你的数组并创建一个正则表达式,然后你可以使用replace和回调函数(或者像sln的答案一样使用单行替换)来创建跨度

注意:假设所有表情符号的名称都在

var emojies = ["smile", "smiley", "grin", "joy"];
//Create a single regex
var regex = new RegExp(":("+ emojies.join("|") +"):","g");
/* Will result in /:(smile|smiley|grin|joy):/g
 * which basically is find smile OR simely OR grin OR joy 
 * between : and :
 */

var ele = document.getElementById("#whateverElement");
var result = ele.innerText.replace(regex,function(fullmatch,match){
   //fullmatch will be like :smile:
   //while match will be like smile, so you would want to use match in the class

   //Using a simple jquery call to create the span 
   //you could also just use string concatenation 
   var span = jQuery("<span>",{ class: "emoji "+match });

   //return the text you want to replace fullmatch with        
   return span[0].outerHTML;
});

ele.innerHTML = result;

这是一个例子:微笑:,一些文字:微笑::欢乐::欢乐:

加入您的数组并创建一个正则表达式,然后您可以使用带有回调函数的replace(或者像sln的答案一样使用单行replace)来创建跨度

注意:假设所有表情符号的名称都在

var emojies = ["smile", "smiley", "grin", "joy"];
//Create a single regex
var regex = new RegExp(":("+ emojies.join("|") +"):","g");
/* Will result in /:(smile|smiley|grin|joy):/g
 * which basically is find smile OR simely OR grin OR joy 
 * between : and :
 */

var ele = document.getElementById("#whateverElement");
var result = ele.innerText.replace(regex,function(fullmatch,match){
   //fullmatch will be like :smile:
   //while match will be like smile, so you would want to use match in the class

   //Using a simple jquery call to create the span 
   //you could also just use string concatenation 
   var span = jQuery("<span>",{ class: "emoji "+match });

   //return the text you want to replace fullmatch with        
   return span[0].outerHTML;
});

ele.innerHTML = result;

这是一个例子:微笑:,一些文字:微笑::欢乐::欢乐:
似乎是一个简单的问题
text.replace(/:(smile | smiley | grin | joy):/g'
应该这样做。

似乎是个简单的问题
text.replace(/:(smile | smiley | grin | joy):/g'

应该这样做。

循环遍历所有数组项,并使用正则表达式替换所有数组项。然后把绳子放进容器里

我的功能

function stringToEmoji(text){
    var findText = '',
        htmlString = '';
    $.each(emojies, function(i, _this){
        findText=new RegExp(':'+$.trim(_this)+':','i');//need to add 'gi' to work properly
        htmlString = text.replace(findText,"<span class='emoji " + _this + "emoji_name'></span>")
    })
    return htmlString;
}
函数stringToEmoji(文本){
var findText=“”,
htmlString='';
$.each(emojies,function(i,_this){
findText=newregexp(':'+$.trim(_this)+':','i');//需要添加'gi'才能正常工作
htmlString=text.replace(findText,“”)
})
返回htmlString;
}
使用Patrick的答案进行改进

function stringToEmoji(text){
    var findText = '',
        htmlString = '',
        regex = new RegExp(":("+ emojies.join("|") +"):","gi");
    htmlString = text.replace(regex,"<span class='emoji $1'></span>");
    return htmlString;
}
函数stringToEmoji(文本){
var findText=“”,
htmlString='',
regex=newregexp(“:(“+emojies.join(“|”)+”,“gi”);
htmlString=text.replace(regex,“”);
返回htmlString;
}

循环遍历所有数组项,并使用正则表达式替换所有数组项。然后把绳子放进容器里

我的功能

function stringToEmoji(text){
    var findText = '',
        htmlString = '';
    $.each(emojies, function(i, _this){
        findText=new RegExp(':'+$.trim(_this)+':','i');//need to add 'gi' to work properly
        htmlString = text.replace(findText,"<span class='emoji " + _this + "emoji_name'></span>")
    })
    return htmlString;
}
函数stringToEmoji(文本){
var findText=“”,
htmlString='';
$.each(emojies,function(i,_this){
findText=newregexp(':'+$.trim(_this)+':','i');//需要添加'gi'才能正常工作
htmlString=text.replace(findText,“”)
})
返回htmlString;
}
使用Patrick的答案进行改进

function stringToEmoji(text){
    var findText = '',
        htmlString = '',
        regex = new RegExp(":("+ emojies.join("|") +"):","gi");
    htmlString = text.replace(regex,"<span class='emoji $1'></span>");
    return htmlString;
}
函数stringToEmoji(文本){
var findText=“”,
htmlString='',
regex=newregexp(“:(“+emojies.join(“|”)+”,“gi”);
htmlString=text.replace(regex,“”);
返回htmlString;
}


你能告诉我们你试过什么吗?如果你想拔出你所有的头发,你可以使用正则表达式,如果你没有冰雹,那么指甲就足够了。如果您不反对,可以尝试使用JQuery搜索DOM并基于内容进行替换。或者,如果您只搜索
javascript表情分析器
我在下面的链接中尝试了答案,那么有许多源代码库:但没有成功。我是begginer,所以,正则表达式对我来说很难:/而且,我不知道
regex
是否是最好的方法,但这正是我所想的。你能告诉我们你已经尝试了什么吗?如果你想拔出你所有的头发,你可以使用正则表达式,如果你没有冰雹,那么指甲可能就足够了。如果您不反对,可以尝试使用JQuery搜索DOM并基于内容进行替换。或者,如果您只搜索
javascript表情分析器
我在下面的链接中尝试了答案,那么有许多源代码库:但没有成功。我是begginer,所以,正则表达式对我来说很难:/而且,我不知道正则表达式是否是最好的方法,但这正是我所想的。我怀疑它,尝试了它。
:smiley::smiley::grin::joy:
,我得到的是
。但这是解决方案的一部分。@sln将
\1
替换为
$1
,+1虽然对于较短的替换,您忘记了可以这样做:)我怀疑,尝试了
:smiley::smiley::grin::joy:
,我得到的是
。但这是解决方案的一部分。@sln将
\1
替换为
$1
,+1但对于较短的替换,您可以这样做:)@PatrickEvans我们可以对区分大小写做些什么吗?我的意思是,即使情况不同,这也能起作用。如果我们使用
“gi”
,那么可能存在css问题。@Igor,您需要执行:
var result=stringToEmoji(test)$(“.context”).html(结果),至于敏感度,请使用
gi
,只需在返回之前在html上使用小写即可!我是否可以在
$(文档)中使用此函数。就绪(函数…
?@Igor,已修复。是的,您可以确保函数创建部分在就绪之前,然后执行
$(“.content div”)。toEmoji()
在ready中。@PatrickEvans对于区分大小写,我们可以做些什么吗?我的意思是,即使大小写不同,我们也可以这样做。如果我们使用
“gi”
,那么可能会有css问题。@Igor,您需要做:
var result=stringToEmoji(test);$(.context”).html(result);
,至于敏感度,我们使用
gi
,在返回它之前只需在html上使用小写即可!我可以在
$(文档)中使用此函数吗。就绪(函数…
?@Igor,已修复。是的,您可以确保函数创建部分在就绪之前,然后执行
$(“.content div”).toEmoji()
在ready中。