2011-02-07 4 views
2

자바 스크립트 오류가 발생하여 불행히도 재현하는 방법을 모릅니다. IE8 개발자 도구는 다음 오류를보고합니다. 예기치 않은 한정 기호. 다음 행은 오류 발생 : 내가 제대로 같은 파이프 (\\|) 문제를 해결하기 위해 탈출 할 생각RegExp가 IE8에서 "예기치 않은 한정 기호"오류를 생성하는 이유는 무엇입니까?

var g=RegExp(d+"=([^|]*)").exec(j); //output from closure-compiler 

,하지만 나도 몰라 못했습니다 때문에 난 나도 몰라 오류를 재현하는 방법.

모든 제안이나 해결책을 환영합니다.

감사합니다.

[업데이트]

d의 값은 내가 검색하기 위해 노력하고있어 __utmz 쿠키 값의 열쇠는 그들이이 ["utmccn", "utmcmd", /* ... */] 같은 배열에 나열되어 있습니다. 이제는 할 수있는 일이별로 없어요. 전 독감 친구와 집에 있습니다.

+3

예기치 않은 수량 한정자는 아마도 정규 표현식의 나머지 부분에 아무런 문제가 없으므로 변수 d의 값에서 오는 것일 수 있습니다. –

+0

오류를 재현 할 수 없다면 d를 생성하는 로직을 더 자세히 살펴야한다고 가정합니다 . 왜 그 논리를 게시하지 않는거야? – sln

+0

비슷한 문제와 상대적인 해결책, 희망 도울 수있다. http://stackoverflow.com/questions/8137741/how-to-escape-a-regex-that-generates-an-error-of-unexpected-quantifieron-ie – GibboK

답변

5

"한정 기호"는 * 또는 +과 같은 정규식 연산자입니다. 위의 코드에서 변수 "d"는 정규 표현식 파서에 대해 "코드"로 해석되는 내용을 포함하고 있으며 유효하지 않습니다. 당신은 적절하게 도망쳐 야 할 필요가 있습니다. 이는 HTML 마크 업에 포함 된 이스케이프 처리 문제와 매우 유사하지만 문제의 구문이 완전히 다른 경우 (즉, 정규 표현식 구문과 HTML 구문) 문제입니다.

정규식 구문에는 많은 특수 문자가 있습니다. 분명히 그렇게 할 수있는 꽤 노골적인 정규식을 취할 것입니다. 이러한 일을 수행 할 수있는 방법은 다음과 같습니다.

var quoted = unquoted.replace(/([*+.?|\\\[\]{}()])/g, '\\$1'); 

그럴 수는 없습니다. 내게 마약보다 더 확실하게 테스트 된 코드를 둘러 보겠습니다 :-)

게시 한 코드가 일부 라이브러리에서 올 수있는 것처럼 보였으므로 스택 추적을 문제가 시작되는 곳을 찾기 위해 IE 디버거.

+0

이상한 모든 d 값은 이미 하나씩 정의되어 있으며,이 값들은 모두 [az]입니다. 슬픈 것은 내가 가지고있는 IE stack trace가 가지고있는 또 다른 두 명의 사람들이 보낸 jpeg이다. *이 코드의 "Unexpected quantifier"오류가있다 ... Fix! * – Minkiele

-1

일반적으로 항상 문자 클래스 내에서 특수 문자를 이스케이프 처리해야합니다. 정규식 엔진을 실행하면 실패합니다.

+3

메타 문자 (역 슬래시), 오직'^','-',']', 때로는'[''문자 클래스 안에 특별한 의미가 있습니다. 그들의 특별한 의미가 때로는 그들의 위치에 의존하기 때문에 약간 혼란 스러울 수 있습니다. (예 :'[]]'.'는 .NET에서'''와 매치하지만 Java에서는 구문 오류입니다.) 그러나 정규 표현식에 대해서는 들어 본 적이 없습니다. '[^ |]'을 "파이프 이외의 것"으로 취급합니다. –

관련 문제