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