好的,所以我试图创建一个smilie数组,问题在于它将使用JavaScript,并且由于字符混乱而出现错误。

这是我的错误:[17:14:57.025] SyntaxError:括号未结束
这是代码行:

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;
}


请注意,Function本身没有任何问题,我在数组中仅使用1个简单的smilie进行了尝试。

最佳答案

除了(以外,还有更多特殊字符需要先转义,然后再将它们添加到正则表达式中。

堆栈溢出中已经存在一个有关如何在将这些字符发送到正则表达式之前对其进行转义的问题,您可以在此处查看:Escape string for use in Javascript regex

我修改了您的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关键字,否则它将在全局名称空间中可用,这不是一件好事(建议阅读:What is the purpose of the var keyword and when to use it (or omit it)?)。

小提琴:http://jsfiddle.net/d9X4P/

09-30 18:59