Javascript 全局替换不';不起作用,但简单的替换很好
我有一个简单的smily解析器代码:Javascript 全局替换不';不起作用,但简单的替换很好,javascript,Javascript,我有一个简单的smily解析器代码: for (var key in smiles) { text = text.replace(key , smiles[key]); } return text; 所以问题是,这只会替换第一个,所以我切换到全局替换 for (var key in smiles) { var r = '/'+key+'/g'; console.log(r); text = text.replace(r , smiles[key]); } 在控制台中,我
for (var key in smiles) {
text = text.replace(key , smiles[key]);
}
return text;
所以问题是,这只会替换第一个,所以我切换到全局替换
for (var key in smiles) {
var r = '/'+key+'/g';
console.log(r);
text = text.replace(r , smiles[key]);
}
在控制台中,我有:
/:)/g
/;)/g
/:(/g
这似乎还可以,但它不会取代这些代码中的任何一个:;):(
怎么了?正则表达式文字(
/foo/g
)与看起来像正则表达式文字(“/foo/g”
)的字符串不同
您可以使用RegExp
构造函数动态创建正则表达式:
var r = new RegExp(key, 'g');
在这一点上,你会得到与括号相关的错误。-用最好的方式放在一起,它可能看起来像这样:
function escapeRegex(text) {
return text.replace(/[[{}()*+?.\\^$|]/g, "\\$&");
}
function replaceAll(str, map) {
var re = new RegExp(Object.keys(map).map(escapeRegex).join("|"), "g");
return str.replace(re, function(m) {
return map[m];
});
}
只需在文本中循环并替换笑脸,直到不再出现:-
for (var key in smiles) {
while (text.indexOf(key) > -1) {
text = text.replace(key, smiles[key]);
}
}
return text;
是的,我得到:Uncaught SyntaxError:Invalid regular expression:/:)/:Unmatched')“将map作为局部变量并调用map方法有点令人讨厌。Where
key=':\)”
您想要r=new RegExp(key,'g')代码>你应该提供一些解释。thanx,这有点过分了。。。至少我的浏览器认为。。。firefox和chromejust都试图为那些大脑不计算正则表达式的人(比如我的大脑)提供一个替代方案。。。