JavaScript正则表达式表情符号

问题描述:

好吧,所以我想制作一个笑脸数组,问题在于它会出现在JavaScript中,并且由于奇怪的字符而出现错误。JavaScript正则表达式表情符号

这里是我的错误:[17:14:57.025]语法错误:未结束的括号 下面的代码行:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z']; 

我知道,在有些地方必须有字符前面是一个反斜杠,我已经一直在尝试我能想到的一切。

谢谢。

编辑:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z']; 
var smiley_xhtml = ['smile','wink','raspberry','big_smile','surprise','sad','crying','plain','worried','embarrassed','angry','angel','devil','cool','kiss','laugh','tired']; 

function smilies(text) { 
    for (var i = 0; i< smiley_array.length; i++) { 
     word = smiley_array[i].replace(")","\\)"); 
     word = new RegExp(word, "g"); 
     var smiley_img = '<img style="margin-bottom: -3px;" height="20px" width="20px" src="<?php echo $this->x7->smilie_url; ?>' + smiley_xhtml[i] + '.png" />';  
     text = text.replace(word, smiley_img); 
    } 
return text; 
} 

注意,没有什么不对的功能它的自我,我只有1阵列中的简单表情符号tryed它。

+4

的这段代码工作正常。请显示其余部分。 –

+0

请检查Elliott的答案。 – user2965339

有哪些需要你在你的正则表达式添加之前进行转义比(其他多个特殊字符。

已经有关于如何将它们发送到一个正则表达式之前逃脱这些字符在这里堆栈溢出的问题,你可以在这里看到:Escape string for use in Javascript regex

我适应您的smilies功能使用已提供的功能我上面提到的问题。

function smilies(text) { 
    for (var i = 0; i< smiley_array.length; i++) { 
     var word = new RegExp(escapeRegExp(smiley_array[i]), "g"); 
     var smiley_img = '<img style="margin-bottom: -3px;" height="20px" width="20px" src="<?php echo $this->x7->smilie_url; ?>' + smiley_xhtml[i] + '.png" />'; 

     text = text.replace(word, smiley_img); 
    } 

    return text; 
} 

我还添加了var关键字的word功能之前,否则将在全局命名空间,这是不是一件好事(推荐阅读:What is the purpose of the var keyword and when to use it (or omit it)?)可用。

小提琴:http://jsfiddle.net/d9X4P/

您可以将您的阵列为正则表达式如下:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z']; 

for(var i = 0; i < smiley_array.length; i++){ 
    smiley_array[i] = smiley_array[i].replace(/([)(*|$])/g, '\\$1'); //This will add backslashes before), (, *, |, and $ 
} 
var regex = new RegExp(smiley_array.join('|'), 'g'); 

然后将它应用于文本像这样:

var test = 'Lorem ipsum :) dolor sit ;) amet, consectetur :P adipiscing :D elit :O. Integer :(ac urna ultrices, :\'(tincidunt :| lectus :$ suscipit, :cool: sagittis :@ tortor. (A) Donec eu 3:) metus :/ aliquam :lol: velit :* elementum :z pulvinar'; 

console.log(test.match(regex)); 

使用此代码报价特殊的正则表达式字符在笑脸数组:

string = string.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); 

您的全码:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z']; 
var smiley_xhtml = ['smile','wink','raspberry','big_smile','surprise','sad','crying','plain','worried','embarrassed','angry','angel','devil','cool','kiss','laugh','tired']; 

function smilies(text) { 
    for (var i = 0; i< smiley_array.length; i++) { 
     str = smiley_array[i].replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); 
     word = new RegExp(word, "g"); 
     var smiley_img = '<img style="margin-bottom: -3px;" height="20px" width="20px" src="<?php echo $this->x7->smilie_url; ?>' + smiley_xhtml[i] + '.png" />';  
     text = text.replace(word, smiley_img); 
    } 
    return text; 
} 
+0

@ user2965339:我目前在手机上,只要我回到我的电脑,我就会测试一下,并尝试为您提供一个工作代码。 – anubhava

我知道,我是题外话,它只是一个共享的缘故:$

var smilies = { 
    smile: /:\)/g, 
    bigsmile: /:D/g, 
    worried: /:\//g 
}; 

var txt = ':) :D :) :/'; 
for (var k in smilies) { 
    txt = txt.replace(smilies[k], k); 
} 
txt; // "smile bigsmile smile worried"