javascript无效的正则表达式

时间:2012-03-20 16:40:49

标签: javascript jquery

我有以下代码:

$.each(css, function(i, v) {
        css[i] = this.replace('{bind}', bindName, css[i]);
});

我想用bindName的值替换所有{bind}。 为了尝试这个,我给了bindName值'Test'。

'css'是一个带数据的简单对象。

var css = {
            tabs          : 'tab-{bind}',
            outerWrapper  : 'outerWrapper-{bind}',
            innerWrapper  : 'innerWrapper-{bind}-{id}-{tab}',
            subMenue      : 'subMenue-{bind}-{id}',
            subMenueItem  : 'subMenue-Item'
          };

在Firefox中,我在第68行收到错误“无效正则表达式标志k”。 第68行:

$.each(css, function(i, v) {
        css[i] = this.replace('{bind}', bindName, css[i]); // LINE 68
});

如果有必要,这是我的替换功能:

this.replace = function (s, r, su) {
      return su.split(s).join(r);
    }   

Google-Chrome中没有错误,但在Firefox(最新版本)中 - 您能找到错误吗?

2 个答案:

答案 0 :(得分:3)

改变这个:

css[i] = this.replace('{bind}', bindName, css[i]);

其中任何一个:

css[i] = this.replace('{bind}', bindName);

css[i] = v.replace('{bind}', bindName);

css[i] = css[i].replace('{bind}', bindName);

错误消息的原因是在Firefox中,String.replace采用表示正则表达式标志的可选第三个参数(例如'i''g');你在css[i]传递了该参数,并且Firefox将其解释为包含无效标志。 Chrome 给出错误消息的原因是它不支持该非标准功能,因此它完全忽略了该参数。

答案 1 :(得分:-1)

我不确定,但也许你的问题是“{”字符在正则表达式语言中是特殊的。 试着逃避它:

css[i] = this.replace('\{bind\}', bindName, css[i]);