2012-04-21 203 views
1

嘿家伙今晚只是一个快速的。javascript字符串替换

我只是想换一个笑脸如:-P到HTML代码像<span class=surp></span> 但它与一个错误,是
Uncaught SyntaxError: Invalid regular expression: /:-(/: Unterminated group


这是我的代码

一部分出来
newmessage = newmessage.replace(/:-(/gi, "<span class=sad></span>"); 

我想通了,它不喜欢支架,所以有没有其他的方式来与支架做到这一点?

回答

3

在正则表达式,(开始一个组 - 但在你的情况要匹配字面(,所以你需要用反斜线escapg它:

newmessage = newmessage.replace(/:-\(/gi, "<span class=sad></span>"); 

除此之外,我会做的-可选 - 大多数人使用:(代替:-(

newmessage = newmessage.replace(/:-?\(/gi, "<span class=sad></span>"); 
+0

感谢兄弟帮了不少忙 – ryanc1256 2012-04-21 12:22:38

+0

生病标记你的答案时,它会让我 – ryanc1256 2012-04-21 12:23:39

0

正如@ThiefMaster正确地指出,你需要逃脱支架在正则表达式字面上使用它,用转义字符\

但你想做的事,我想你会是最好的传递函数作为第二个参数,这样你就可以在一个单一的.replace()电话与一个单一的正则表达式要更换所有表情符号匹配取代一切。

事情是这样的:

newmessage = newmessage.replace(/(:-\(|:\(|:-\)|:\)|:-P|:P)/gi, function(match) { 
    switch (match.toUpperCase()) { 
    case ':-)': 
    case ':)': 
     return '<span class="happy"></span>'; 
    case ':-(': 
    case ':(': 
     return '<span class="sad"></span>'; 
    case ':-P': 
    case ':P': 
     return '<span class="surp"></span>'; 
    default: 
     return match; 
    } 
});