2015-05-21 71 views
2

我一直在寻找"get everything but" regex questions,但我无法让它适用于我的情况。 我试图让除了结束评论*/以外的所有内容。改进自定义正则表达式

我有这个表达式,得到的JavaScript函数的我声明:

/(\b(f|F)unction(.*?)\((.*?)\)\s*\{)/g 

我就发现目前唯一的问题是,它也让我的东西,如:

function to do whatever */ function demo (el, hop) { 

而不是

function demo (el, hop) { 

当此函数声明带注释包含单词function

/** * recursive function to do whatever */ function demo (el, hop) { /*whatever*/ } 

这是我试过至今没有结果:

/(\b(f|F)unction^((?!\*\/).)*?\((.*?)\)\s*\{)/g 

这基本上是用什么建议in this post

^((?!hede).)*$ //recommended 
^((?!\*\/).)*? //mine 

我在做什么错?

+0

“这基本上是用在这篇文章有什么建议:”我建议你阅读其他的答案,特别是基准和ridgerunner的答案,因为你有选择最慢的方式。 –

回答

1

您可以使用该负前瞻基于正则表达式:

/(\bfunction((?!function).)*\((.*?)\)\s*{)/gi 

RegEx Demo

(?!function)是负先行只会如果没有function关键字下一个字符相匹配。检查我的演示为您的例子。

0

该方法将查找大多数函数声明,包括匿名函数声明。

/\s?function(\s+\w+)?\s*\([^\)]*\)/i 

测试正则表达式的很好的工具:https://regex101.com/

+1

似乎无法获得全部:https://regex101.com/r/nS6bO7/1与https://regex101.com/r/nS6bO7/2比较 – Alvaro