2011-03-07 2 views
1

무료 자바 스크립트를 사용하여 웹 사이트의 텍스트를 검색하고 강조 표시합니다. 검색 동작이 단어의 일부인 경우 구멍 단어가 강조 표시되어야합니다. 예 : "stackoverflow"보다 "over"검색이 강조 표시되어야합니다.Javascript : 돌연변이 된 모음, 움라우트가있는 검색 및 splitText

그래서 첫 번째 단계는 전체 단어의 시작을 선택 정규식을 사용하여 텍스트를 검색하고 시작 위치를 반환하는 것입니다 :

var string='over'; //String to search 
var pattern= new RegExp("[a-zA-Záéíóäëiöúàèììùüß-]*"+string,'i'); 
var position = node.data.toUpperCase().search(pattern); 

다음 하이라이트 함수를 호출하는 것입니다 .... 시작 위치를 사용하고, 단어의 마지막 문자 (endbit)를 검출

  if (position >= 0) 
       return highlight(node, position, string); 
      else 
       return 0; 

...

function highlight(node, position, string){ 
       var middlebit = node.splitText(position); 
       var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/)); 
[...] next: highlight the word... 
,174,

돌연변이 된 모음, 움라우트 등을 사용하지 않는 한 잘 작동합니다. 예 : 넘어서 검색하면 전체 단어 "stackoverflow"가 강조 표시됩니다. "würstchen"(예 : bratwürstchen)을 검색하면 작동하지 않습니다. 이

var position = node.data.toUpperCase().search(pattern); 

또는

var middlebit = node.splitText(position); 

특수 문자의 종류와 작동하지 않습니다, 같은 lookes.

누구나 그 문제를 어떻게 풀릴 수 있을지 생각해보십시오.

내 자신의 질문에 대답하기 위해, 당신에게

Bndr

+0

아무것도? http://stackoverflow.com/search?q=regex+OR+regexp+umlaut – mplungjan

답변

1

을 너무 많이 감사합니다의 이 후 일 "시도 착오"하고 내가 "실종 마지막으로이 질문을 작성, 나는 발견 "이 줄의 내용은 다음과 같습니다.

var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/)); 

endbit를 찾는 데 잘못된 표현이 있습니다. 그래서 바로 하나입니다

var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/i)); 

작은 원인이 큰 영향 ;-) 여기

관련 문제