2010-11-23 2 views
8

내 코드 :악센트를 구분 정규식

jQuery.fn.extend({ 
highlight: function(search){ 
    var regex = new RegExp('(<[^>]*>)|('+ search.replace(/[.+]i/,"$0") +')','ig'); 

    return this.html(this.html().replace(regex, function(a, b, c){ 
    return (a.charAt(0) == '<') ? a : '<strong class="highlight">' + c + '</strong>'; 
    })); 
} 

}); 

내가 액센트 문자를 강조하려는은 즉 : [카오] 또는 expre [카오] 또는 [카오] OR :

$('body').highlight("cao"); 

강조한다 [Caption] OR [Cáo]

어떻게하면됩니까?

답변

5

유일한 올바른 방법은 유니 코드 정규화 양식 D을 통해이를 실행하는 것입니다. 정식 분해.

그런 다음 결과 (\pM 자 또는 아마도 \p{Diacritic})가있는 모든 표시를 제거하고 표시되지 않은 버전과 일치하는 항목을 실행하십시오.

어떠한 상황에서도 리터럴을 하드 코딩하지 마십시오. 에크!

보아 sorte!

+3

몇 가지 코드 예제를 공유 하시겠습니까!?! – billy

+0

어떻게하면됩니까? 그것은 절반의 해답입니다. 단지 솔루션을 가리키고 있습니다! – kravemir

3

대체 문자 테이블을 작성하고 이에 따라 정규식을 동적으로 생성해야합니다. 예를 들어 :

var alt = { 
    'c': '[cCç]', 
    'a': '[aAãÃá]', 
    /* etc. */ 
}; 

highlight: function (search) { 
    var pattern = ''; 
    for (var i = 0; i < search.length; i++) { 
    var ch = search[i]; 
    if (alt.hasOwnProperty(ch)) 
     pattern += alt[ch]; 
    else 
     pattern += ch; 
    } 

    ... 
} 

그런 다음 search = 'cao'이는 패턴 [cCç][aAãÃá]o를 생성합니다.

관련 문제