2012-03-20 3 views
1

나는 다음과 같은 코드했습니다 :자바 스크립트 잘못된 정규 표현식

$.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' 
      }; 
파이어 폭스에서

내가 줄에 오류 "잘못된 정규 표현식 플래그 K"를 얻을 수 68 행 68 :

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

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

이것이 내 대체 funcion입니다 필요가 있다면

Google 크롬에는 오류가 없지만 Firefox (최신 버전)에는 오류가 없습니다. 오류를 찾을 수 있습니까?

+0

$ (this)로 변환하면 작동합니까? –

+0

그렇게 생각하지 마라. - 나는 시도 할 수있다. 그러나 나는 이것이 틀림 없다고 생각한다 -이 함수는 클래스의 methodes이므로 $ this()를 수행했다고 생각하지 않는다. 그러나 이미 다른 방식으로 시도했다. 전역 함수를 변수로 사용하는 경우에도이 방법이 효과가 없습니다. – TJR

답변

3

변경이 :

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

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

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

오류 메시지에 대한 이유는 파이어 폭스에서, String.replace 정규식 플래그를 나타내는 세번째 인수를 취하는 것입니다 (예 : 'i' : 이들의에

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

에게 또는 'g'); 당신은 그 인수에 대해 css[i]을 전달하고 있으며, Firefox는 그것을 잘못된 플래그를 포함하고 있다고 해석합니다. Chrome 이 아닌 이유는 그것이 비표준 기능을 지원하지 않는다는 것입니다. 따라서 단순히 그 인수를 완전히 무시하는 것입니다.

+0

@downvoter : 이유에 대해 설명해 주시겠습니까? – ruakh

+0

고마워요! 방금 교체가 주어진 자바 스크립트 함수임을 잊어 버렸습니다 ... 저는 방금 내 함수의 이름을 바꿨습니다. – TJR

-1

확실하지 않지만 "{"문자가 정규 표현식 언어에서 특수하다는 점이 문제 일 수 있습니다. 탈출을 시도하십시오 :

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