2016-07-15 7 views
0

저는 액센트 문자가 포함되어 있거나 포함되어 있지 않을 수있는 단어를 대체 할 정규식을 찾으려고했습니다. 나는 지난 2 일 동안 이것을 연구했지만 문제를 해결하는 데 필요한 정보를 찾을 수 없습니다.액센트 문자를 포함 할 수있는 단어를 대체하는 자바 스크립트

나는 훌륭한 악센트 문자없이 단어를 처리하는 간단한 정규식을 마련했다 :

var re = new RegExp('(?:\\b)hello(?:\\b)', 'gm'); 
var string = 'hello hello hello world hellos hello'; 
string.replace(re, "FOO"); 

결과 : FOO FOO FOO world hellos FOO 위의 작품을 내가 원하는대로

. 위의 코드에서 문제는 단어에 악센트 문자가 문자열의 첫 번째 문자 또는 마지막 문자로 포함 된 경우입니다. 예 :

var re = new RegExp('(?:\\b)helló(?:\\b)', 'gm'); 
var string = 'helló helló helló world hellós helló'; 
string.replace(re, "FOO"); 

결과 : helló helló helló world FOOs helló

원하는 결과 : 악센트 문자가 경계로 해석되기 때문에 나의 이해에서 FOO FOO FOO world hellós FOO

은, 위의 발생. 문제 해결에서 내 시도 (주의 : 범위 [A-zÀ-ÿ] 내가 단어를 구성하는 데 유효한 알파벳을 고려할 것입니다) :

var re = new RegExp('([^A-zÀ-ÿ]|^)helló([^A-zÀ-ÿ]|$)', 'gm'); 
var string = 'helló helló helló world hellós helló'; 
string.replace(re, "$1FOO$2"); 

결과 : 당신이 볼 수 있듯이 FOO helló FOO world hellós FOO

, 나는 훨씬 더 가까이 해요 원하는 결과. 그러나이 문제는 문제의 단어가 세 번 이상 연속적으로 나타날 때 발생합니다. 두 번째로 나타나는 helló은 무시되었습니다. 그 공백 앞에있는 공백이 이미 첫 번째 발생 인 helló에 의해 일치 되었기 때문입니다.

아무도 FOO FOO FOO world hellós FOO을 달성하는 방법에 대한 제안 사항이 있습니까?

+0

http://stackoverflow.com/questions/5436824/matching-accented-characters-with-javascript-regexes의 중복 가능성이 있지만 확인할 때까지 hamer를 사용하지 않습니다. – mplungjan

+0

요구 사항이 무엇인지 정확히 설명 할 수 있습니까? 단어 일치? 문자열이나 특정 위치의 모든 인스턴스에 대해 대체됩니까? 그래서 그 정규식 대신 왜'helló \ B'가 아니겠습니까? – 10100111001

답변

2

대답은 조금 복잡하지만,이 문제에 어려움을 겪고있는 이유에 관해서는 다음에 답하고있다 : (특히 ECMAScript를 6 전에 자바 스크립트의 좋은 유니 코드 지원의 부족 주어진, 그러나 Why can't I use accented characters next to a word boundary?

나는 과거에이 문제를 나에게 맡겼다.) 나는 다음과 같이보다 나은 유니 코드 지원을 제공하는 제 3 자 라이브러리를 사용하는 것이 더 나은 것으로 나타났습니다. http://xregexp.com/

이렇게하면 구형 브라우저에서 지원되는 차이가 제거됩니다.