Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 替换字符串中的笑脸会使页面崩溃_Javascript - Fatal编程技术网

Javascript 替换字符串中的笑脸会使页面崩溃

Javascript 替换字符串中的笑脸会使页面崩溃,javascript,Javascript,我试图用下面这样的字符串替换笑脸 function decoder(text, done) { async.parallel([ function (cback) { // Thanks to @CMS var emoticons = window.symbols, patterns = [], metachars = /[[\]{}()*+?

我试图用下面这样的字符串替换笑脸

    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);
        });
    }
函数解码器(文本,完成){
异步并行([
功能(cback){
//感谢@CMS
变量emoticons=window.symbols,
模式=[],
元字符=/[\]{}()*+?.\\\\^$\-,&\\\\s]/g;
//为每个定义的属性构建正则表达式模式
for(表情符号中的变量i){
if(emoticons.hasOwnProperty(i)){//转义元字符
push(“(“+i.replace(元字符,\\$&”)+”);
}
}
//构建正则表达式并替换
text=text.replace(新的RegExp(patterns.join('|'),'g'),函数(match){
返回表情符号的类型[匹配]!=“未定义”?
“”匹配;
});
cback(null,true);
},
功能(cback){
var ref=window.smileys,
键=对象。键(参考);
异步。每个(键,函数)(键,cb){
text=text.replace(新的RegExp('['+key+']','gi'),“”);
cb(空);
},函数(){
cback(null,true);
});
}],函数(err,res){
完成(文本);
});
}

但这让页面崩溃了。在调试过程中,我观察到第二个函数阻止了这个问题,但不明白为什么。笑脸的总数是300。笑脸的格式是
[跳舞]
[开玩笑]
:)
等等。这一技巧没有使用下面使用的正则表达式,而是非常有效,这要归功于@James McLaughlin

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