Powiel możliwe:
How to get function parameter names/values dynamically from javascriptWyrażenie regularne, aby uzyskać listę parametrów z definicji funkcji
Obecnie pracuję nad projektem w Javascript (node.js), który ma mnie próbuje uzyskać tablicę parametrów nazw (wartości NOT, nie potrzebuję argumentów) z funkcji. Obecnie używam Function.toString(), aby uzyskać ciąg funkcji, a następnie uruchomiono wyrażenie regularne przeciwko temu, aby uzyskać listę parametrów.
Weźmy następujący prosty przykład:
var myFunction = function (paramOne, paramTwo) { ... }
Running mój regex przed tym, a potem robi jakąś magię ciąg (Split, etc) Spodziewam się tablicę z powrotem tak:
paramList = ['paramOne', 'paramTwo']
Mam coś, co działa, ale mam wrażenie, że prawdopodobnie nie jest to najlepsze rozwiązanie, ponieważ niektóre z funky znaków javascript pozwala ci używać nazw zmiennych, a javascript pozwala ci definiować funkcje na wielu liniach.
Oto co obecnie mam:
function.*[\w\s$]*(\((.*[\w\s,$]*)\))
To daje mi moje „spotkanie” w grupie 1, a potem moją listę param bez parens w grupie 2, która jest cool. Czy to naprawdę najlepszy sposób robienia tego, co chcę? Czy istnieje lepszy regularny wyraz, który mógłbym użyć do tego? Naprawdę nie szukam czegoś "prostszego", ale tak naprawdę czegoś, co może złapać wszystkie możliwe sytuacje.
Każda pomoc zostanie doceniona, a wiele z góry z góry!
Jak myślisz, jak powinienem to zrobić? To właśnie próbuję zrobić z moim regexem, ale może jest inne podejście? Czy myślisz, że mógłbym po prostu indexOf "(" i ")", a następnie podzielić to, co jest pomiędzy? Czy to byłoby lepsze niż szalone regex? –
@JasonL .: Dodałem kod do odpowiedzi (i przykład na żywo). –
Dzięki! Twoje rozwiązanie jest o wiele prostsze, niż przypuszczam. Obecnie próbuję go z różnymi odmianami dozwolonymi przez javascript. Czy pozwoli to uchwycić jakąś szaloną postać specjalną, którą dopuszcza javascript (jednym z najbardziej znanych jest wyraz dezaprobaty)? Należy również zauważyć, że jest to tylko dla środowiska node.js, więc naprawdę muszę się tylko martwić o V8 :) –