Verifica di una funzionalità della compilazione di espressioni regolari in IE11
Vorrei provare Unicode Regex Property Escapes per evitare di compilare un'espressione regolare non funzionante nei browser che non lo supportano (ad esempio IE11). Idealmente, vorrei scrivere qualcosa sulla falsariga di:
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
Ciò è effettivamente possibile? So che ci sono alcune API di rilevamento delle funzionalità, ma per quanto ne so non ce n'è una per regex. In alternativa, se c'è un altro modo di scrivere questo che non interromperà la compilazione e genererebbe un errore che posso rilevare, allora sarebbe fantastico.
Risposte
Funziona in Firefox o Safari; dovrebbe andare bene in 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);
Se ti senti a tuo agio con qualcosa come Function
o eval
, e un try/catch
... qualcosa del genere dovrebbe funzionare:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
Nota che devi sfuggire al \\p
perché ora è contenuto in una stringa. Testato su IE11 e ha funzionato (fallito senza un errore di analisi fatale)