IE11에서 정규식 컴파일 기능 테스트
Jan 05 2021
유니 코드 정규식 속성 이스케이프 를 지원하지 않는 브라우저 (예 : IE11)에서 손상된 정규식을 컴파일하지 않도록 테스트하고 싶습니다 . 이상적으로는 다음과 같은 내용을 작성하고 싶습니다.
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
이것이 가능합니까? 기능 감지 API가 있다는 것을 알고 있지만 내가 아는 한 정규 표현식에는 없습니다. 또는 컴파일을 중단하지 않고 오류가 발생하는 다른 작성 방법이 있다면 잡을 수 있습니다.
답변
1 Expressionist Jan 05 2021 at 04:07
이것은 Firefox 또는 Safari에서 작동합니다. IE11에서는 괜찮습니다.
let regex = /somereplacementregex/;
try
{
regex = new RegExp ("\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F", "gu");
}
catch (e) { }
//
// use regex...
console.log (regex);
1 David784 Jan 05 2021 at 01:13
당신은 같은 편안한 느낌을 경우 Function
나 eval
, 그리고 try/catch
이 같은 ... 뭔가 작업을해야합니다 :
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
\\p
이제 문자열에 포함되어 있으므로 를 이스케이프해야합니다 . IE11에서 이것을 테스트했고 작동했습니다 (치명적인 구문 분석 오류없이 실패했습니다)