Menguji fitur kompilasi regex di IE11

Jan 05 2021

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

1 Expressionist Jan 05 2021 at 04:07

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);
1 David784 Jan 05 2021 at 01:13

Jika Anda merasa nyaman dengan sesuatu seperti Functionatau 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 \\pkarena itu terkandung dalam string sekarang. Menguji ini di IE11 dan berhasil (mundur tanpa kesalahan penguraian yang fatal)