1

嘿伙计们今晚只是一个快速的。

我只是想改变一个笑脸,例如:-P 到一个 html 代码,<span class=surp></span> 但它出现了一个错误,即
Uncaught SyntaxError: Invalid regular expression: /:-(/: Unterminated group


这是我的代码的一部分

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

我想通了,它不喜欢支架,所以有没有其他方法可以用支架做到这一点?

4

2 回答 2

3

在正则表达式中,(开始一个组 - 但在你的情况下你想匹配文字(,所以你需要用反斜杠转义它:

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

除此之外,我会-选择 - 大多数人使用:(而不是:-(

newmessage = newmessage.replace(/:-?\(/gi, "<span class=sad></span>");
于 2012-04-21T12:20:08.597 回答
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;
  }
});
于 2012-04-21T12:28:33.670 回答