To jest trochę problem, mam pomysł, jak mogę to naprawić, ale zastanawiam się, czy istnieje (dużo) łatwiejszy sposób.Zapobieganie właściwościom tępienia konstruktora RegExp w JavaScript
Krótko mówiąc, za każdym razem, gdy w JavaScript jest wykonywane wyrażenie regularne, niektórym właściwościom przypisuje się wartości w konstruktorze RegExp
. Na przykład:
/foo/.test('football')
//-> true
RegExp.input
//-> "football"
RegExp.rightContext
//-> "tball"
Chciałbym wykonać wyrażenie regularne bez wpływu na te właściwości. Jeśli to nie jest możliwe (i nie sądzę, że tak jest), chciałbym przynajmniej przywrócić je do ich poprzednich wartości.
Wiem, że input
/$_
jest zapisywalny, ale większość innych nie jest, jak się wydaje. Jedną z opcji może być rekonstrukcja wyrażenia regularnego, które będzie ponownie stosować wszystkie te wartości, ale myślę, że byłoby to dość trudne.
Powodem tego chcę, ponieważ piszę shim of a native API i testuję go przy użyciu zestawu test262. Pakiet test262 kończy się niepowodzeniem w przypadku niektórych testów, w których sprawdza, czy obiekt RegExp ma nieoczekiwane wartości dla tych właściwości.
to ma być tymczasowe? –
Podoba mi się zagadka, którą ujawniłeś. Jednak myślę, że zmieniasz część systemu, która nie musi być zmieniana, aby pomieścić zepsutą część: zepsuta część jest twoją ramą testową. Jeśli twój produkt końcowy nie wymaga, aby obiekt RegExp zachował swój pierwotny stan, to nie ma powodu, aby powinieneś pozwolić, aby dowolny test w twojej strukturze zmusił cię do przepisania twojego kodu. Powiedziałbym, że dziełem, które chcesz zmienić, jest framework testowy. Zakładam, że szukałeś opcji konfiguracyjnych i takich, aby zignorować pewien test na obiekcie RegExp? –
@Hurricane: Tak, mógłbym zignorować to i prawie to zrobiłem. Gdyby rozwiązanie nie było tak łatwe, prawdopodobnie bym to zrobił. Ponieważ jednak piszę shim dla natywnego API, chciałem, aby było to jak najbliżej możliwe wdrożenie do pokrycia wszystkich baz. Już kilka razy wygłaszałem przepisy testowe na moją korzyść, jeśli nie jest to możliwe. –