2016-07-15 2 views
1

최근 유니 코드 글꼴 및 유니 코드 표준을 따르지 않는 다른 글꼴을 감지하기 위해 javascript 정규식에서 swift 용 정규식을 만들었습니다. 하지만 지금은 그것을 변환하는 문제가있어. 문제는 \s\u1031 자바 스크립트 정규식 패턴이 신속하게 허용하지 않습니다.javascript regex와 swift regex의 차이점

var regexZG = new RegExp("\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း","g"); 

어떻게 신속하게 다시 작성할 수 있습니까? 신속하게 처리 할 수 ​​있습니까?

답변

1

당신의 정규식은 자바 스크립트에서도 틀린 것 같습니다. 리터럴 문자열과 함께 new RegExp()을 사용한다는 것은 정규 표현식으로 파싱되기 전에 정규 표현식이 문자열 리터럴 파싱을 처리해야한다는 것을 의미합니다. 즉, \s은 공백이 아닌 리터럴 "s"와 일치하는 일반 s으로 바뀌는 것을 의미합니다.

Swift에서 임의 문자 앞에 백 슬래시를 넣을 수 없으므로 invalid escape sequence in literal 오류가 발생합니다.

자바 스크립트에서, 당신은 리터럴 정규식 사용한다 :

var regexZG = /\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း/g; 

스위프트 년을, 당신은 \s 같은 특수 정규식 시퀀스에서 백 슬래시를 두 배로해야합니다.

다른 문제는 유니 코드는 당신이 당신의 \u 표현의 모든 코드 포인트 값을 중괄호 유타 할 필요가 있으므로, 형태 대신 \uXXXX\u{XXXX}의 수 있습니다 신속에 빠져 있다는 점이다.

"\\s\u{1031}|\u{1031}[^\u{1000}-\u{1021}\u{103b}\u{1040}\u{106a}\u{106b}\u{107e}-\u{1084}\u{108f}\u{1090}]| ေ[က-အ]်|[က-အ]း" 
:

그래서 스위프트 버전은 다음과 같이 보입니다