2012-06-04 4 views
2

페이지의 다른 요소 (페이지 스크래핑)에서 가져온 내용으로 테이블을 만듭니다. 나는 그것을 트림 다음 정규 표현식 텍스트를 끌어 innerText와 나는 TextContent을 사용하고신비한 쓰레기 문자 - IE 8 만

:

string.replace(/^\s+|\s+$/g,""); 

이 IE 9와 크롬에서 잘 작동하지만 IE 8에 나는 쓰레기 문자를 얻고 그 나는 식별 할 수 없다. 나는 jsfiddle의 경고와 행동을 재현 할 수 있었다 :

http://jsfiddle.net/Te4FQ/

이 여분의 문자입니다 무엇을, 어떻게 내가 그것을 제거 할 수 있습니까?

업데이트 : 유용한 답장을 보내 주셔서 감사합니다. 문제의 캐릭터가 u200E (왼쪽에서 오른쪽으로 표시) 인 것 같습니다. 그래서 제 질문의 두 번째 부분이 남아 있습니다. 어떻게 정규 표현식으로 그러한 문자를 제거하고 일반 텍스트를 유지할 수 있습니까? 페이지에

+0

그건 IE8 브라우저 모드에서 IE9에서 잘 작동합니다. 어떤 캐릭터를 얻습니까? – MaxArt

+0

[charCodeAt] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/charCodeAt)를 사용하여 신비한 문자를 식별 할 수 있습니다. – Bergi

+2

IE7의 Repros. 이것은 문자 8206 인 것처럼 보입니다. 왼쪽에서 오른쪽 마커입니다. –

답변

6

jsFiddle 스 니펫의 "위험"및 "완료"<th> 태그는 내용의 끝에 U + 200E (왼쪽에서 오른쪽으로 표시, 일명 LRM) 코드 포인트가 있습니다. 공백 문자가 아니기 때문에 \s으로는 일치시킬 수 없습니다.

이 문자를 제거하는 한 가지 방법은 XRegExp library을 사용하는 것이므로 \p{C}의 모든 일치 항목을 빈 문자열 (즉, 삭제)로 바꿀 수 있습니다. \p{C}은 유니 코드의 "기타"범주에있는 코드 포인트 (제어, 형식, 개인용, 대리 및 할당되지 않은 코드 포인트 포함)와 일치합니다. U + 200E는 구체적으로 \p{Cf} "기타, 형식"하위 범주 내에 있습니다.

+0

감사! JavaScript regex에서 \ p {C}를 표현하는 법을 알고 있습니까? 라이브러리를 사용하면 내 간단한 요구에 너무 무거울 것입니다. – Christophe

+0

Unicode 6.1 Basic Multilingual Plane을 기반으로 '\ p {C}'를 정확하게 재현하려면 3,800 자 이상의 정규식 문자 클래스를 사용해야합니다. 코드 포인트 범위를 최대한 활용한다고 가정합니다. – slevithan

+0

정보의 위대한 덩어리 –

1

인쇄 해보십시오 쓰레기 문자가 이스케이프 코드로 표시한다

escape(string.replace(/^\s+|\s+$/g,"")); 

의 결과.

+0

감사합니다. 어떤 정규식 기술이 그런 가비지 문자를 처리 할 것을 권장할까요? \ s는 작동하지 않는 것 같습니다. – Christophe