Verifica di una funzionalità della compilazione di espressioni regolari in IE11

Jan 05 2021

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

1 Expressionist Jan 05 2021 at 04:07

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

Se ti senti a tuo agio con qualcosa come Functiono 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 \\pperché ora è contenuto in una stringa. Testato su IE11 e ha funzionato (fallito senza un errore di analisi fatale)