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