Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配所有javascript函数的正则表达式_Javascript_Regex_Pcre - Fatal编程技术网

匹配所有javascript函数的正则表达式

匹配所有javascript函数的正则表达式,javascript,regex,pcre,Javascript,Regex,Pcre,大约一个月前,我想把我所有的javascript函数按字母顺序组织起来,今天我在玩一个正则表达式,这让我再次想到了这一点。我只想匹配外部函数,以避免嵌套函数被移动,我想这几乎已经完成了,但是我缺少了一些东西 我用bobble bubble在这一页上的答案作为起点。 这将匹配所有函数定义,并捕获直到第一个大括号的参数。由于某些原因,当它是表达式的一部分时,我无法使它匹配换行符模式[^.*\n*]+,但当它本身匹配时,它就匹配得很好 我使用Sublime text editor作为搜索工具,但它最

大约一个月前,我想把我所有的javascript函数按字母顺序组织起来,今天我在玩一个正则表达式,这让我再次想到了这一点。我只想匹配外部函数,以避免嵌套函数被移动,我想这几乎已经完成了,但是我缺少了一些东西

我用bobble bubble在这一页上的答案作为起点。

这将匹配所有函数定义,并捕获直到第一个大括号的参数。由于某些原因,当它是表达式的一部分时,我无法使它匹配换行符模式
[^.*\n*]+
,但当它本身匹配时,它就匹配得很好


我使用Sublime text editor作为搜索工具,但它最终会出现在一个JS文件中,这可能是操作代码的一种简单方法。

这似乎匹配了我的所有函数及其主体(除了在一行中定义的函数,这需要额外的表达式)

或者,如果你不想抓住尸体,只需添加
?:

function.*\(.*\).*\{(?:.|\n)*?\n\}

我们的想法是匹配,直到我们用一个新行和一个结束的卷曲括号结束:这样,主体内的括号(或内部函数)就不会与我们的搜索冲突。

经过一天的修改,这里有一个正则表达式,它将分解一个js文件以匹配所有命名函数,然后将其分解为函数名、参数和主体。与Floribon的解决方案不同,这将匹配任何格式样式,甚至是缩小的格式,并忽略嵌套的大括号和函数

function\s+(?<functionName>\w+)\s*\((?<functionArguments>(?:[^()]+)*)?\s*\)\s*(?<functionBody>{(?:[^{}]+|(?-1))*+})
function\s+(?\w+)\s*\((?(?:[^()]+)*)?\s*(?{((?:[^{}]+[124;(?-1))*+})

“按字母顺序排列”——这真是个糟糕的主意。顺序必须是语义驱动的。不管怎样,如果你想正确地解决这个问题——使用任何JS语法解析器,它都会变得容易和可靠100倍。你必须寻找新的代码行<代码>\n函数。*?\n\}可能就是这样……我不同意它会匹配任何格式样式。不匹配函数表达式*(除非已命名),并且不会匹配箭头函数来命名一些函数。将“Flavor”更改为Javascript时会抛出“前面的标记不可量化”错误。我想知道这是否与Javascripts回溯的限制有关?
function.*\(.*\).*\{(?:.|\n)*?\n\}
function\s+(?<functionName>\w+)\s*\((?<functionArguments>(?:[^()]+)*)?\s*\)\s*(?<functionBody>{(?:[^{}]+|(?-1))*+})