thể trùng lặp:
How to get function parameter names/values dynamically from javascriptRegular Expression để có được danh sách tham số từ định nghĩa hàm
Tôi hiện đang làm việc trên một dự án trong javascript (Node.js) có tôi cố gắng lấy một mảng tham số tên (KHÔNG giá trị, tôi không cần đối số) từ một hàm. Tôi hiện đang sử dụng Function.toString() để có được chuỗi chức năng và sau đó chạy một regex chống lại đó để có được danh sách tham số của tôi.
Hãy lấy ví dụ đơn giản sau:
var myFunction = function (paramOne, paramTwo) { ... }
Chạy regex của tôi chống lại điều này, và sau đó làm một số chuỗi ma thuật (tách, vv) Tôi mong chờ một mảng trở lại như thế này:
paramList = ['paramOne', 'paramTwo']
Tôi có một cái gì đó hoạt động nhưng tôi cảm thấy như nó có thể không phải là giải pháp tốt nhất cho một số ký tự funky javascript cho phép bạn sử dụng cho tên biến và javascript sẽ cho phép bạn xác định các chức năng trên nhiều dòng.
Dưới đây là những gì tôi hiện có:
function.*[\w\s$]*(\((.*[\w\s,$]*)\))
này mang lại cho tôi tôi "trận đấu" trong nhóm 1 và sau đó danh sách param của tôi mà không Parens trong nhóm 2, đó là mát mẻ. Đây có thực sự là cách tốt nhất để làm những gì tôi muốn không? Có một biểu thức chính quy tốt hơn tôi có thể sử dụng cho điều này? Tôi không thực sự tìm kiếm một cái gì đó "đơn giản" nhưng thực sự chỉ là một cái gì đó mà có thể bắt tất cả các tình huống có thể xảy ra.
Bất kỳ trợ giúp nào sẽ được đánh giá cao và cảm ơn bạn rất nhiều!
Làm thế nào để bạn nghĩ rằng tôi nên đi về điều đó? Đó là những gì tôi đang cố gắng để làm với regex của tôi, nhưng có lẽ có một cách tiếp cận khác nhau? Bạn có nghĩ rằng tôi chỉ có thể indexOf "(" và ")" và sau đó chia những gì ở giữa? Điều đó sẽ tốt hơn là một regex điên? –
@JasonL .: Tôi đã thêm một số mã vào câu trả lời (và một ví dụ trực tiếp). –
Cảm ơn! Giải pháp của bạn đơn giản hơn nhiều so với tôi nghĩ tôi đang mong đợi. Tôi hiện đang thử nó với tất cả các biến thể khác nhau mà javascript cho phép. Điều này sẽ nắm bắt bất kỳ của các ký tự đặc biệt điên javascript cho phép (một trong những nổi tiếng nhất là cái nhìn của sự từ chối)? Tôi cũng nên lưu ý rằng điều này là dành cho môi trường node.js ONLY, vì vậy tôi thực sự chỉ cần lo lắng về V8 :) –