Thử nghiệm tính năng biên dịch regex trong IE11

Jan 05 2021

Tôi muốn kiểm tra Unicode Regex Property Escapes để tránh biên dịch một biểu thức chính quy bị hỏng trong các trình duyệt không hỗ trợ nó (ví dụ: IE11). Tốt nhất, tôi muốn viết một cái gì đó dọc theo dòng:

if (regex supports unicode property escapes) {
    return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
    return /somereplacementregex/;
}

cái này nó có hoàn toàn có thể xảy ra được không? Tôi biết có một số API phát hiện tính năng nhưng theo tôi biết thì không có API nào dành cho regex. Ngoài ra, nếu có một cách viết khác không phá vỡ quá trình biên dịch và gây ra lỗi mà tôi có thể mắc phải thì điều đó cũng sẽ rất tuyệt.

Trả lời

1 Expressionist Jan 05 2021 at 04:07

Điều này hoạt động trong Firefox hoặc Safari; sẽ ổn trong 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

Nếu bạn cảm thấy thoải mái với một cái gì đó như Functionhoặc eval, và try/catch... một cái gì đó như thế này sẽ hoạt động:

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

Lưu ý rằng bạn phải thoát \\pvì nó được chứa trong một chuỗi ngay bây giờ. Đã kiểm tra điều này trên IE11 và nó hoạt động (không gặp lỗi phân tích cú pháp nghiêm trọng)