2016-12-27 3 views
0

今私はチャットjsのクライアントのために使用します。感情のイメージのためのより速い方法は置換を使用していますか?

chat = chat.replace(/\+best/gi, "<img src='./img/emotes/+best.png' class='chat'>"); 
chat = chat.replace(/\+cry/gi, "<img src='./img/emotes/+cry.png' class='chat'>"); 
chat = chat.replace(/\+hello/gi, "<img src='./img/emotes/+hello.png' class='chat'>"); 
chat = chat.replace(/\+pain/gi, "<img src='./img/emotes/+pain.png' class='chat'>"); 
chat = chat.replace(/\+smile/gi, "<img src='./img/emotes/+smile.png' class='chat'>"); 

あり33ofのようにそれらを、問題が明らかにスペース、または直接その背後にある単語やあるいはその前にあるかもしれませんされています。

私はそれがずっと速くできるという気持ちがありますが、いずれにも提案はありますか?

+0

私はこれをバックアップすることはできませんが、正規表現は一般的にかなり遅いと聞いてきました。正規表現のw/o正規表現を置き換えることはできませんか? –

答えて

0

ソリューション:

これは、イメージ名のスペースで区切られた文字列を通過し、(でもスペースで)に応じてそれらを交換し、それが離れて単語の

var emotes = 
    ("best cry hello pain smile").split(" "); 

for(var index = 0, emote; index < emotes.length; index++) { 
    emote = RegExp(("\\b\\s*(\\+" + emotes[index] + ")\\s*\\b"), "gi"); 
    chat = chat.replace(emote, '<img src="./img/emotes/$1.png" class="chat">'); 
} 
1
であれば、それを無視します

複雑なパターンマッチングは行っていません。あなたはここで文字列の単純な置換を行うことができるはずです。

chat.replace("+best", "<img src='./img/emotes/+best.png' class='chat'>"); 
0

はここで動的に検索テキストを置き換える.replace()、に関数を渡すことで、1行で置換を行うにはES6の方法です。

const emotes = ['best', 'cry', 'hello', 'pain', 'smile']; 
const search = new RegExp(emotes.map((emote) => '\\+'+emote).join('|'),'gi'); 

chat = chat.replace(search, 
    (match) => `<img src='./img/emotes/${match}.png' class='chat'>`); 

上記のいずれかを説明すると便利です。

関連する問題