String.replace回调不起作用

时间:2018-03-07 12:19:16

标签: javascript node.js regex

我正在尝试创建一个类来将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

我做错了什么?

1 个答案:

答案 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");