JavaScript的正则表达式无效

问题描述:

我有下面的代码:JavaScript的正则表达式无效

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

我要全部更换{}绑定的与bindName的价值。 为了试试这个,我给了bindName值'Test'。

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

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

在Firefox中我得到线错误 “无效的正则表达式标志K” 68 68号线:

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

如果有必要,这是我更换funcion:

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

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

+0

它工作,如果你是包装成$(this)? – 2012-03-20 16:43:13

+0

不这么认为 - 我可以尝试,但我认为它一定是这个 - 这些功能是一个类的方法,所以我不认为我必须做$ this() - 但我已经用另一种方式尝试过了 - 而且全局函数只是一个变量,这也不起作用。 – TJR 2012-03-20 16:45:24

更改此:

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 不支持给出错误消息的原因是它不支持该非标准功能,因此完全忽略该参数。

+0

@downvoter:小心解释为什么? – ruakh 2012-03-20 16:47:48

+0

非常感谢!我只是忘记了替换是一个给定的JavaScript函数...我只是重命名我的功能,它的工作原理。 – TJR 2012-03-20 16:56:18

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

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