Menguji fitur kompilasi regex di IE11
Saya ingin menguji Unicode Regex Property Escapes untuk menghindari kompilasi ekspresi reguler yang rusak di browser yang tidak mendukungnya (misalnya IE11). Idealnya, saya ingin menulis sesuatu di sepanjang baris:
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
Apakah ini mungkin? Saya tahu ada beberapa API deteksi fitur tetapi sejauh yang saya tahu tidak ada satu pun untuk regex. Atau jika ada cara lain untuk menulis ini yang tidak akan merusak kompilasi dan akan menimbulkan kesalahan yang bisa saya tangkap maka itu juga bagus.
Jawaban
Ini berfungsi di Firefox atau Safari; seharusnya baik-baik saja di 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);
Jika Anda merasa nyaman dengan sesuatu seperti Function
atau eval
, dan try/catch
... sesuatu seperti ini seharusnya berhasil:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
Perhatikan Anda harus keluar dari \\p
karena itu terkandung dalam string sekarang. Menguji ini di IE11 dan berhasil (mundur tanpa kesalahan penguraian yang fatal)