2016-09-20 4 views
2

현재 제가하고있는 프로젝트에서 위키피디아 스크레이퍼를 만들고 있습니다. 문제는 문자열을 비교하려고 할 때 내 코드가 버그를 생성 할 때가 있다는 것입니다. 동일한 문자열이 있으면 때때로 다른 문자열로 등록됩니다. 예를 들면 다음과 같습니다.공백이 다르며 문자가 null 인 문자를 비교하십시오.

var elementText = $("selector").text(); 
console.log(elementText); // "abc def" 
console.log(elementText === "abc def"); // false 

위키 피 디아는 내 코드에서 감지하고 이상하게 여기는 이상한 문자를 사용합니다. 나는 시도했다 :

그리고 elementText.replace(/\s+/g, '')을 사용하고 어느 쪽도 작동하지 않는 것처럼 보인다. 직관적으로 동일한 문자열이 실제로 같은 문자로 일치하도록이 문자를 완전히 없애려면 어떻게해야합니까?

참고 : ==으로 코드를 테스트했으며 문제가 해결 된 것 같습니다. 그러나 향후 버그를 피하기 위해이 픽스를 사용하지 않는 것이 좋습니다.

+1

[전체 데이터베이스를 무료로 다운로드 할 수 있음] (https://en.wikipedia.org/wiki/Wikipedia:Database_download)을 알고 계셨습니까? – Liam

+0

@Liam 나는하지 않았다. 나는 이것을 확실히 살펴볼 것입니다. 그렇다면 앞으로도이 문제를 해결할 수있는 방법을 알고 싶습니다. – Bluefire

+0

위키피디아에서는 줄 바꿈하지 않는 공백과 빈칸을 사용하지 않고 거의 모든 null 문자를 사용합니다. 그리고 그때조차'\ s'가 그것들과 일치해야합니다. 그 정규식으로 정확히 무엇을 시도했는지 보여주십시오. – Bergi

답변

0

replace의 첫 번째 인수를 묶는 따옴표를 제거하십시오. 정규식 (/g)을 따옴표로 묶을 필요가없는 replace 함수에 사용하고 있기 때문입니다.

function replaceBadSpaces(string) { 
    return decodeURIComponent(encodeURIComponent(string).replace(/%C2%A0/g, "%20")); 
} 
+1

'replace (/ \ u00a0/g, '')'를 사용해야하므로 URI 인코딩을 사용할 필요가 없습니다. – Bergi

+0

바보 같았습니다. 그것을 지적 주셔서 감사합니다! – Bluefire