7
votes

Expression régulière pour correspondre à la fonction JavaScript

Y a-t-il une expression régulière qui correspond aux fonctions JavaScript?

Comme xxx


1 commentaires

Vous pensez que vous faites. Mais vous ne le faites pas. Qu'essayez-vous de réellement accomplir?


5 Réponses :



4
votes

dans JS, une fonction peut contenir des fonctions (ce qui peut contenir des fonctions, etc.): xxx

aussi, vous pouvez avoir des littéraux ou des commentaires de chaîne pouvant contenir (sous) cordes qui ressemblent à des fonctions: xxx

ou contiennent des pièces de fonctions Votre regex déclencherait: xxx

donc, Pour vous répondre, vous pouvez interroger ce que la regex serait de correspondre aux fonctions de JS: elle n'existe pas. Vous devriez / pourrait utiliser un analyseur approprié pour cela.


0 commentaires

11
votes

Je sais que cette question a 5 ans, mais contrairement à ce que tout le monde a dit, j'ai réellement concocté un modèle assez efficace pour faire comme vous l'avez demandé. Bien que, assez complexe, j'en ai utilisé plusieurs fois dans mes propres projets et je n'ai pas encore eu de hoquet ... J'aurais souhaité que j'ai vu cette question beaucoup plus tôt. J'espère que cela vous aidera (sinon pour vous, espérons-le pour ceux qui recherchent une solution similaire)

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


3 commentaires

Mignon, mais voici un exemple simple qui n'est pas analysé correctement: fonction () {retour "}"}


@Zsoltszatmari Un homme commun - tandis que c'est valable, je ne sais pas pourquoi vous voudrez jamais cela comme une fonction ...


Voici un autre exemple simple où il ne fonctionne pas: fonction () {if (a) {} else {if (b) {if (c) {}}}}



0
votes

Aujourd'hui, je suis confronté au même défi, je voulais trouver définitions de fonction et fonction de fonction dans une chaîne.

et résolu en utilisant un analyseur appelé Esprima .

(Remarque: Ceci est pour Nodejs, pas le navigateur JavaScript. Exécutez des dépendances avec NPM i Esprima clipboardy et mettez le code dans index.js nœud index.js ) xxx


0 commentaires

0
votes

J'ai écrit une expression régulière au dos, pour détecter des fonctions, afin que nous puissions vérifier s'il y a une documentation écrite pour chaque fonction, pas si facile à suivre, pas une expression régulière incroyable, mais il semble couvrir beaucoup de Types de fonctions Déclarations:

^ (?: [\ s] +)? (?: Const | Cons | Let | var |)? (?: [A-Z0-9.] + (?: prototype)?)? (?: \ s)? (?: [A-Z0-9 -_] + \ S? =)? \ S? (?: [A-Z0-9] + \ S + \: \ S +)? (?: Fonction \ s?)? (?: [A-Z0-9 _-] +)? \ S? \ (. * \) \ s? (?:. +)? ([=>] :)? \ {(?: (?: [^} {] + | \ {(?: [^} {] + | \ {[^} {] * \}) * \} (? : \ s? \ (. * \ \) \ s? \ S? \ s? \ s?)?)? (?: \;)?

Voir les types que j'ai testés ici: < Un href = "https://regex101.com/r/wgqfm8/9/" rel = "nfollow NOREFERRER"> https://regex101.com/r/wgqfm8/9/

Cela gérera tous les cas, mais devrait attraper la plupart d'entre eux!

choses que j'ai délibérément n'a pas ajouté: xxx

il y a vraiment quelque chose que je ' Je ne couvre pas, mais j'ai essayé de couvrir la plupart des bases, vous aurez juste besoin de couper les espaces des groupes de match


0 commentaires