Questo è un po 'un enigma, ho un'idea di come potrei essere in grado di risolverlo ma mi chiedo se c'è un modo (molto) più semplice.Prevenire le proprietà di contaminazione del costruttore RegExp in JavaScript
In breve, ogni volta che un'espressione regolare viene eseguita in JavaScript, a determinate proprietà vengono assegnati valori sul costruttore RegExp
. Ad esempio:
/foo/.test('football')
//-> true
RegExp.input
//-> "football"
RegExp.rightContext
//-> "tball"
Mi piacerebbe eseguire un'espressione regolare senza influire su queste proprietà. Se ciò non è possibile (e non penso che lo sia), mi piacerebbe almeno ripristinarli ai valori precedenti in seguito.
Lo so input
/$_
è scrivibile, ma la maggior parte degli altri non lo sono, a quanto pare. Un'opzione potrebbe essere quella di ricostruire un'espressione regolare che riapplicherebbe tutti questi valori, ma penso che sarebbe piuttosto difficile.
Il motivo per cui desidero questo è perché sto scrivendo un shim of a native API e lo sto testando utilizzando la suite test262. La suite test262 non riesce su alcuni test in cui viene verificato se l'oggetto RegExp ha valori imprevisti per queste proprietà.
ha a che essere temporaneo? –
Mi piace l'enigma che hai rivelato. Tuttavia, il mio pensiero è che stai cambiando una parte del tuo sistema che non ha bisogno di essere modificato per ospitare una parte rotta: la parte rotta è il tuo framework di test. Se il tuo prodotto finale non richiede che l'oggetto RegExp mantenga il suo stato originale, allora non c'è motivo per cui lasciare che un test arbitrario nel tuo framework ti costringa a riscrivere il tuo codice. Direi che il pezzo che vuoi cambiare è il framework di test. Presumo che hai cercato opzioni di configurazione e tale da ignorare determinati test sull'oggetto RegExp? –
@Hurricane: Sì, potrei scegliere di ignorarlo, e l'ho quasi fatto. Se la soluzione non fosse stata così facile probabilmente lo avrei fatto. Tuttavia, dal momento che sto scrivendo uno shim per un'API nativa, volevo che fosse l'implementazione più vicina possibile a coprire tutte le basi. Ho già piegato le regole del test a mio favore un paio di volte in cui ciò non è possibile, tuttavia. –