IE11'de normal ifade derlemesinin bir özelliğini test etme

Jan 05 2021

Unicode Regex Özellik Kaçışlarını , onu desteklemeyen tarayıcılarda (örneğin IE11) bozuk bir normal ifadeyi derlemekten kaçınmak için test etmek istiyorum . İdeal olarak, şu satırlar boyunca bir şeyler yazmak istiyorum:

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

Bu hiç mümkün mü? Bazı özellik algılama API'leri olduğunu biliyorum, ancak bildiğim kadarıyla regex için bir API yok. Alternatif olarak, bunu yazmanın derlemeyi bozmayacak ve bir hata atacak başka bir yolu varsa, o zaman bu da harika olur.

Yanıtlar

1 Expressionist Jan 05 2021 at 04:07

Bu, Firefox veya Safari'de çalışır; IE11'de uygun olmalı:

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

FunctionVeya gibi bir şey konusunda kendinizi rahat hissediyorsanız evalve try/catch... bunun gibi bir şey çalışmalıdır:

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

\\pArtık bir dizede bulunduğu için 'den kaçmanız gerektiğini unutmayın . Bunu IE11'de test etti ve işe yaradı (önemli bir ayrıştırma hatası olmadan geri döndü)