2009-07-14 6 views
0

J'écris un plug-in pour VS2008 et je voudrais reconnaître la méthode JavaScript (fonction). J'ai un fichier - sample.js: `Comment reconnaître la méthode JavaScript (fonction)

 function test0() 
     { 
      var i = 0; 
      { 
       var j = 0; 
      } 
      var array = { 1: 2, dd: 10, aaa: 3 }; 
        return array; 
     } 

     function test1() 
     { 
      var ii = "x"; 
      { 
       var xx = "x" + ii; 
      } 
      return ii; 
     } 

`

Comment reconnaître ces méthodes? Utiliser des expressions régulières?

Répondre

0

Puisque function est un mot-clé réservé, il est raisonnable de supposer que tant que la fonction mot n'est pas entre guillemets, elle devrait être une fonction javascript.

Regex devrait fonctionner. N'oubliez pas de vérifier si le mot est entre guillemets (ce qui en ferait un mot une chaîne).

4

Rappelez-vous que les fonctions JavaScript peuvent s'écrire de différentes manières. Vous avez montré la définition de la fonction de style "C", mais il y en a d'autres.

Vous verrez beaucoup de "var test2 = function() {}". Vous les verrez également comme des membres d'objets "test3: function() {}"

Et vous pouvez utiliser "nouveau", mais ce n'est pas très populaire.

Et n'oubliez pas que de nombreuses fonctions JavaScript sont anonymes.

Pour faire bonne mesure, vous devez gérer le modèle d'invocation immédiate:

(function() { 

    // ... 

}()); 

Est-ce que le code que vous voyez être limité par des règles auto-imposées? Sinon, vous avez un peu d'analyse à faire quand vous voyez "fonction". D'autant plus que "function" pourrait juste être un mot dans un texte, et vous avez quelques types de citations et quelques types de styles de commentaires à démêler pour voir si c'est simplement une partie d'une chaîne de texte ou une partie d'un commentaire.

+0

Merci pour votre aide. Mais comment identifier les crochets internes: "{", "}" Exemple: Fonction test1() { var ii = "x"; {// c'est un problème pour moi var xx = "x" + ii; } // c'est un problème pour moi return ii; } –

+0

Pourriez-vous éditer votre question originale avec un peu plus de détails sur votre question spécifique? Il est difficile de lire le code dans les commentaires. – Nosredna

+0

L'expression régulière qui résout mon problème: "function \\ s *? \\ ([\\ w, \\ s] *? \\) \\ s *? {([^ {] | ({. *? }) * | [^}]) *?} ". Quelques changements de plus et tout devrait fonctionner. Merci pour les astuces. –

Questions connexes