替换字符串中的表情符号使页面崩溃

时间:2014-04-12 07:48:06

标签: javascript

我正在尝试用下面的字符串替换表情符号

    function decoder(text, done) {
        async.parallel([

        function (cback) {
            // Thanks to @CMS
            var emoticons = window.symbols,
                patterns = [],
                metachars = /[[\]{}()*+?.\\|^$\-,&#\s]/g;

            // build a regex pattern for each defined property
            for (var i in emoticons) {
                if (emoticons.hasOwnProperty(i)) { // escape metacharacters
                    patterns.push('(' + i.replace(metachars, "\\$&") + ')');
                }
            }

            // build the regular expression and replace
            text = text.replace(new RegExp(patterns.join('|'), 'g'), function (match) {
                return typeof emoticons[match] != 'undefined' ?
                    "<img src='/" + emoticons[key] + "' />" : match;
            });

            cback(null, true);
        },

        function (cback) {
            var ref = window.smileys,
                keys = Object.keys(ref);
            async.each(keys, function (key, cb) {
                text = text.replace(new RegExp('[' + key + ']', 'gi'), "<img src='/" + ref[key] + "' />");

                cb(null);
            }, function () {
                cback(null, true);
            });
        }], function (err, res) {
            done(text);
        });
    }

但这会让网页崩溃。是否有任何特定的代码阻止此问题,而调试我已经观察到第二个功能是阻止它但无法理解为什么。表情总数为300.表情符号的格式为[Dancing][Kidding]:)等。

1 个答案:

答案 0 :(得分:0)

而不是使用下面使用的正则表达式,这非常有效,感谢@James McLaughlin

 text = text.split(smileySymbol).join(imgHTML);