如何用javascript替换字符串?
我有这个功能:如何用javascript替换字符串?,javascript,Javascript,我有这个功能: function emoticons(text){ var url = "http://www.domain.it/images/smilies/"; var emt = { ":D" : 'icon_e_biggrin.gif', ":-D" : 'icon_e_biggrin.gif', ":)" : 'icon_e_smile.gif', ":-)" : 'icon_e_smile.g
function emoticons(text){
var url = "http://www.domain.it/images/smilies/";
var emt = {
":D" : 'icon_e_biggrin.gif',
":-D" : 'icon_e_biggrin.gif',
":)" : 'icon_e_smile.gif',
":-)" : 'icon_e_smile.gif',
";)" : 'icon_e_wink.gif',
"';-)" : 'icon_e_wink.gif',
":(" : 'icon_e_sad.gif',
":-(" : 'icon_e_sad.gif',
":o" : 'icon_e_surprised.gif',
":?" : 'icon_e_confused.gif',
"8-)" : 'icon_cool.gif',
":x" : 'icon_mad.gif',
":P" : 'icon_razz.gif'
};
for (smile in emt){
text = text.replace(smile, '<img src="' + url + emt[smile] + '" class="emoticons" />');
}
return (text);
}
功能图释(文本){
变量url=”http://www.domain.it/images/smilies/";
var emt={
“:D”:‘icon_e_biggrin.gif’,
“:-D”:‘icon_e_biggrin.gif’,
“:)”:“icon_e_smile.gif”,
“:-)”:“icon_e_smile.gif”,
“;)”:“icon_e_wink.gif”,
“;-):“icon_e_wink.gif”,
“:(“:'icon_e_sad.gif”,
“:-(“:'icon_e_sad.gif”,
“:o”:“icon\u e\u su.gif”,
“:?”:“icon_e_fuzzle.gif”,
“8-”:“icon_cool.gif”,
“:x”:“icon\u mad.gif”,
“:P”:“icon_razz.gif”
};
对于(emt中的微笑){
text=text.replace(微笑“”);
}
返回(文本);
}
如您所知.replace()转换第一次出现时,如何替换文本中的多个表情符号?如何更改此函数
非常感谢!您可以将每个表情符号字符串转换为全局正则表达式,当与字符串#replace方法一起使用时,它将替换所有出现的内容:
function emoticons(text){
var url = "http://www.domain.it/images/smilies/";
var emt = {
/\:D/g: 'icon_e_biggrin.gif',
/\:\-D/g: 'icon_e_biggrin.gif',
//...
你必须小心在表情符号文本中逃出特殊的字符。
对你现有的函数来说是一个相当小的改变,这是应该的。如果你做这些替换的文本很大,你可以考虑在头上翻转,使用正则表达式替换和替换函数。p> 正则表达式替换如下:
/A | B | C/
,它告诉正则表达式引擎看起来像A或B或C。您给String#replace
的函数接收匹配文本作为参数,这样它就可以在映射中查找相关替换:
function emoticons(text){
// The base URL of all our smilies
var url = "http://www.domain.it/images/smilies/";
// A regex alternation that looks for all of them (be careful to use escapes
// where necessary)
var searchFor = /:D|:-D|:\)|:-\)|;\)|';-\)|:\(|:-\(|:o|:\?|8-\)|:x|:P/gi;
// A map mapping each smiley to its image
var map = {
":D" : 'icon_e_biggrin.gif', // Capped version of the next
":d" : 'icon_e_biggrin.gif', // Lower case version of the previous
":-D" : 'icon_e_biggrin.gif', // Capped version of the next
":-d" : 'icon_e_biggrin.gif', // Lower case version of the previous
":)" : 'icon_e_smile.gif',
":-)" : 'icon_e_smile.gif',
";)" : 'icon_e_wink.gif',
"';-)" : 'icon_e_wink.gif',
":(" : 'icon_e_sad.gif',
":-(" : 'icon_e_sad.gif',
":O" : 'icon_e_surprised.gif', // Capped version of the next
":o" : 'icon_e_surprised.gif', // Lower case version of the previous
":?" : 'icon_e_confused.gif',
"8-)" : 'icon_cool.gif',
":X" : 'icon_mad.gif', // Capped version of the next
":x" : 'icon_mad.gif', // Lower case version of the previous
":P" : 'icon_razz.gif', // Capped version of the next
":p" : 'icon_razz.gif' // Lower case version of the previous
};
// Do the replacements
text = text.replace(searchFor, function(match) {
var rep;
// Look up this match to see if we have an image for it
rep = map[match];
// If we do, return an `img` tag using that smiley icon; if not, there's
// a mis-match between our `searchFor` regex and our map of
// smilies, but handle it gracefully by returning the match unchanged.
return rep ? '<img src="' + url + rep + '" class="emoticons" />' : match;
});
return (text);
}
功能图释(文本){
//我们所有笑脸的基本URL
变量url=”http://www.domain.it/images/smilies/";
//一个正则表达式替换,用于查找所有的正则表达式(注意使用转义)
//(如有需要)
var searchFor=/:D::-D:\):-\)-\)-\)-\:\(;:-\):\(;:o:\?:8-\):x::P/gi;
//将每个笑脸映射到其图像的贴图
变量映射={
“:D”:‘icon_e_biggrin.gif’,//下一个
“:d”:‘icon_e_biggrin.gif’,//以前版本的小写版本
“:-D”:‘icon_e_biggrin.gif’,//下一个
“:-d”:‘icon_e_biggrin.gif’,//以前版本的小写版本
“:)”:“icon_e_smile.gif”,
“:-)”:“icon_e_smile.gif”,
“;)”:“icon_e_wink.gif”,
“;-):“icon_e_wink.gif”,
“:(“:'icon_e_sad.gif”,
“:-(“:'icon_e_sad.gif”,
“:O:“'icon\u e\u sugged.gif',//下一个
“:o”:‘icon_e_seu sugged.gif’,//以前版本的小写版本
“:?”:“icon_e_fuzzle.gif”,
“8-”:“icon_cool.gif”,
“:X”:‘icon_mad.gif’,//下一个
“:x”:‘icon_mad.gif’,//以前版本的小写版本
“:P”:‘icon_razz.gif’,//下一个
“:p”:‘icon_razz.gif’//以前版本的小写版本
};
//做替换
text=text.replace(搜索,函数(匹配){
var代表;
//查找此匹配以查看是否有它的图像
rep=映射[匹配];
//如果我们这样做了,就用那个笑脸图标返回一个'img'标记;如果没有,就没有了
//我们的'searchFor'正则表达式和我们的
//微笑,但要优雅地处理它,请原封不动地返回匹配项。
返回代表?'':匹配;
});
返回(文本);
}
这样做只允许在字符串中循环一次并生成一个替换字符串,而不是为每个笑脸循环一次并生成多个临时字符串
对于少量的文本来说,这无关紧要,其复杂性(将每个笑脸保持在两个不同的位置)可能不值得,但对于大型文本来说,这可能是值得的。另一个解决方案是创建一个带有“g”的RegExp每一个字符串的修饰符,因为这个函数可以运行一次以上的PAR页面,你应该创建<代码> EMT 和ReXEXP只有一次:
var emoticons = (function () {
var url = "http://www.domain.it/images/smilies/";
var emt = {
":D" : 'icon_e_biggrin.gif',
":-D" : 'icon_e_biggrin.gif',
":)" : 'icon_e_smile.gif',
":-)" : 'icon_e_smile.gif',
";)" : 'icon_e_wink.gif',
"';-)" : 'icon_e_wink.gif',
":(" : 'icon_e_sad.gif',
":-(" : 'icon_e_sad.gif',
":o" : 'icon_e_surprised.gif',
":?" : 'icon_e_confused.gif',
"8-)" : 'icon_cool.gif',
":x" : 'icon_mad.gif',
":P" : 'icon_razz.gif'
};
var patterns = [];
for (smile in emt) {
patterns.push([
// escaping string special characters by hand
// case-insensitive to match :p :d etc.
new RegExp(smile.replace(/([\(\)\[\]\{\}\.\?\^\$\|\-])/g, "\\$1"), "gi"),
'<img src="' + url + emt[smile] + '" class="emoticons" />'
]);
}
// this is the function that will be referenced by the variable emoticons
return function (text) {
for(var i=0; i<patterns.length; i++) {
text = text.replace(patterns[i][0], patterns[i][1]);
}
return text;
}
})();
var emoticons=(函数(){
变量url=”http://www.domain.it/images/smilies/";
var emt={
“:D”:‘icon_e_biggrin.gif’,
“:-D”:‘icon_e_biggrin.gif’,
“:)”:“icon_e_smile.gif”,
“:-)”:“icon_e_smile.gif”,
“;)”:“icon_e_wink.gif”,
“;-):“icon_e_wink.gif”,
“:(“:'icon_e_sad.gif”,
“:-(“:'icon_e_sad.gif”,
“:o”:“icon\u e\u su.gif”,
“:?”:“icon_e_fuzzle.gif”,
“8-”:“icon_cool.gif”,
“:x”:“icon\u mad.gif”,
“:P”:“icon_razz.gif”
};
var模式=[];
对于(emt中的微笑){
推([
//手动转义字符串特殊字符
//不区分大小写以匹配:p:d等。
新的RegExp(smile.replace(/([\(\)\[\]\{\}.\?\^\$\\\\-])/g,“\\$1”),“gi”),
''
]);
}
//这是变量表情将引用的函数
返回函数(文本){
对于(var i=0;i@Damiano:抱歉,我没有注意到您正在生成一个完整的标记。我已对此进行了更新。您只需将从函数返回的字符串的内容更改为替换项。@Damiano:/gi
将使正则表达式不区分大小写,但不区分映射。对象属性始终区分大小写。您只需放置两个地图上重要的条目只有五个,我已经更新了答案。