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

In a regular expression, ( begins a group - but in your case you want to match the literal (, so you need to escapg it with a backslash:

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

Besides that, I would make the - optional - most people use :( instead of :-(:

newmessage = newmessage.replace(/:-?\(/gi, "<span class=sad></span>");
于 2012-04-21T12:20:08.597 に答える
0

@ThiefMasterによって正しく述べられているように、エスケープ文字を使用して正規表現で文字通り使用するには、角かっこをエスケープする必要があります\

しかし、やりたいことについては、2番目の引数として関数を渡すのが最善だと思います。そうすれば、1回の.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 に答える