0

わかりましたので、スマイリー配列を作成しようとしています。問題は、それが JavaScript になることであり、奇妙な文字のためにエラーが発生することです。

ここに私のエラーがあります: [17:14:57.025] SyntaxError: unterminated 括弧コード行は次のとおりです:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z'];

文字の前にバックスラッシュが必要な場所があることはわかっており、考えられる限りのことを試してきました。

ありがとう。

編集:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z'];
var smiley_xhtml = ['smile','wink','raspberry','big_smile','surprise','sad','crying','plain','worried','embarrassed','angry','angel','devil','cool','kiss','laugh','tired'];

function smilies(text) {
    for (var i = 0; i< smiley_array.length; i++) {
        word = smiley_array[i].replace(")","\\)");
        word = new RegExp(word, "g");
        var smiley_img = '<img style="margin-bottom: -3px;" height="20px" width="20px" src="<?php echo $this->x7->smilie_url; ?>' + smiley_xhtml[i] + '.png" />';    
        text = text.replace(word, smiley_img);
    }
return text;
}

関数自体には何も問題がないことに注意してください。配列内の単純なスマイリーを 1 つだけ使用して試しました。

4

4 に答える 4

1

次のコードを使用して、スマイリー配列で特殊な正規表現文字を引用します。

string = string.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");

完全なコード:

var smiley_array = [':)',';)',':P',':D',':O',':(',':\'(',':|',':/',':$',':@','(A)','3:)',':cool:',':*',':lol:',':z'];
var smiley_xhtml = ['smile','wink','raspberry','big_smile','surprise','sad','crying','plain','worried','embarrassed','angry','angel','devil','cool','kiss','laugh','tired'];

function smilies(text) {
    for (var i = 0; i< smiley_array.length; i++) {
        str = smiley_array[i].replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
        word = new RegExp(word, "g");
        var smiley_img = '<img style="margin-bottom: -3px;" height="20px" width="20px" src="<?php echo $this->x7->smilie_url; ?>' + smiley_xhtml[i] + '.png" />';    
        text = text.replace(word, smiley_img);
    }
    return text;
}
于 2013-11-09T16:37:11.553 に答える
0

私は知っています、私は話題から外れています、それは共有するためだけです:$

var smilies = { 
    smile: /:\)/g, 
    bigsmile: /:D/g, 
    worried: /:\//g 
};

var txt = ':) :D :) :/';
for (var k in smilies) {
    txt = txt.replace(smilies[k], k);
}
txt; // "smile bigsmile smile worried"
于 2013-11-09T17:14:59.213 に答える
0

(正規表現に追加する前にエスケープする必要がある特殊文字は他にもあります。

これらの文字を正規表現に送信する前にこれらの文字をエスケープする方法について、スタック オーバーフローに既に質問があります。ここで確認できます。

smilies上記の質問で提供された関数を使用するように関数を調整しました。

function smilies(text) {
    for (var i = 0; i< smiley_array.length; i++) {
        var word = new RegExp(escapeRegExp(smiley_array[i]), "g");
        var smiley_img = '<img style="margin-bottom: -3px;" height="20px" width="20px" src="<?php echo $this->x7->smilie_url; ?>' + smiley_xhtml[i] + '.png" />';

        text = text.replace(word, smiley_img);
    }

    return text;
}

varまた、関数の前にキーワードを追加しました。wordそうしないと、グローバル名前空間で使用できるようになりますが、これは良いことではありません (推奨される読書: var キーワードの目的と、それを使用する (または省略する) タイミングは何ですか? ) .

フィドル: http://jsfiddle.net/d9X4P/

于 2013-11-09T16:40:19.053 に答える