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

당신은 같은 편안한 느낌을 경우 Functioneval, 그리고 try/catch이 같은 ... 뭔가 작업을해야합니다 :

try { 
  return new Function('', 'return /\\p{Script=Greek}/u;')() 
} catch(e) { return /asdf/g;}

\\p이제 문자열에 포함되어 있으므로 를 이스케이프해야합니다 . IE11에서 이것을 테스트했고 작동했습니다 (치명적인 구문 분석 오류없이 실패했습니다)