我正在尝试创建一个类来将bbcode转换为html但是replace不会调用回调函数。
这就是我所拥有的
function bbcode(){
this.bbcode_table = {};
this.bbcode_table[/[asdf]/g] = function(match, contents, offset, input_string){
return "hi";
}
}
bbcode.prototype.toHTML = function(str){
for (var key in this.bbcode_table){
str = str.replace(key, this.bbcode_table[key]);
}
console.log(str); // asdf
}
var a = new bbcode;
a.toHTML("asdf");
上面的代码不起作用,但是,下面的代码效果很好。
text = "asdf";
text = text.replace(/[asdf]/g, function(match, contents, offset, input_string){
return "hi";
});
console.log(text); // hihihihi
我做错了什么?
答案 0 :(得分:1)
由于key
已转换为string
,因此功能replace
未捕获与"/[asdf]/g"
的任何匹配。
您可以使用对象RegExp
function bbcode() {
this.bbcode_table = {};
this.bbcode_table["[asdf]"] = {
"cb": function(match, contents, offset, input_string) {
return "hi";
},
"flag": "g"
}
}
bbcode.prototype.toHTML = function(str) {
for (var key in this.bbcode_table) {
var regex = new RegExp(key, this.bbcode_table[key].flag);
str = str.replace(regex, this.bbcode_table[key].cb);
}
console.log(str);
}
var a = new bbcode;
a.toHTML("asdf");