2012-04-21 14 views
1

今夜のためにちょっと速い人。JavaScript文字列の置換

私はちょうど<span class=surp></span> のようなHTMLコードに例えば:-Pスマイリーフェイスを変更したいが、それは
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

+0

病気のマークを助けました – ryanc1256

0

として正しく@ThiefMasterで述べたように、あなたが使用して、正規表現で、文字通りそれを使用するブラケットをエスケープする必要がありますエスケープ文字\

あなたがしたいことについては、2番目の引数として関数を渡すことをお勧めします。つまり、置き換えたいすべてのスマイリーに一致する1つの正規表現で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; 
    } 
});