2010-11-17 14 views

Respuesta

3

En JS, una función puede contener funciones (que a su vez pueden contener funciones, y así sucesivamente):

x = function() { 
    this.y = function() { /* ... */ }; 
    function z() { /* ... */ } 
}; 

Además, puede tener literales de cadena o comentarios que pueden contener (sub) cadenas que se parecen a funciones:

var s = "function notAFunction(){}"; 
/* 
function alsoNotAFunction(){} 
*/ 

o contienen partes de las funciones de su expresión regular sería tropezar con:

function f() { 
    var s = "not a closing bracket: } "; 
} 

Así, contestarle pregunta en lo que sería la expresión regular para que coincida con las funciones de JS: no existe. Deberías/podrías usar un analizador apropiado para esto.

4

Sé que esta pregunta tiene 5 años, pero al contrario de lo que han dicho todos los demás, en realidad he preparado un patrón bastante efectivo para hacer lo que me han pedido. Aunque, bastante complejo, lo he usado varias veces en mis propios proyectos y todavía tengo que tener un tropiezo ... ojalá hubiera visto esta pregunta mucho antes. Espero que esta ayuda (Si no fuera por ti, espero que para aquellos que están en busca de una solución similar)

function\s*([A-z0-9]+)?\s*\((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)\s*\{(?:[^}{]+|\{(?:[^}{]+|\{[^}{]*\})*\})*\}

+0

Lindo, pero aquí hay un ejemplo simple que no se analiza correctamente: function() {return "}"} –

Cuestiones relacionadas