Thử nghiệm tính năng biên dịch regex trong IE11
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
Đ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);
Nếu bạn cảm thấy thoải mái với một cái gì đó như Function
hoặ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 \\p
vì 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)