2012-03-20 152 views
1

我有下面的代碼: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

回答

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 不支持給出錯誤消息的原因是它不支持該非標準功能,因此完全忽略該參數。

+0

@downvoter:小心解釋爲什麼? – ruakh 2012-03-20 16:47:48

+0

非常感謝!我只是忘記了替換是一個給定的JavaScript函數...我只是重命名我的功能,它的工作原理。 – TJR 2012-03-20 16:56:18

-1

我不太確定,但也許你的問題是「{」字符在正則表達式語言中是特殊的。 試圖逃脫它:

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