我需要找到接受超过X参数的所有函数签名(比如2)。我尝试了一些类似function\s*\((\w*,){3,10}
的东西(它可以用3-10个args捕获所有签名,但是它没有工作。)它的变化正在产生意想不到的结果。我想我只是不太擅长regex,但是任何帮助都是值得感激的。
更新:我应该指出,我正在编写一种代码检查工具。在这许多事情中,我想找出接受两个以上参数的函数(因为我提倡使用很少参数的函数,在构造函数的情况下使用一个参数)。所以我不能打电话给arguments.length
等。
发布于 2015-05-12 20:16:48
首先,JavaScript是而不是--一种常规语言,因此,人们不能使用正则表达式来完全掌握语言,因此您可能会接受假阳性或假否定。
一个可能很接近的正则表达式是:
function(?:\s+\w+)*\s*\(([^),]*)(\s*,\s*[^),]*){2,}\)
regex的工作方式如下:
function
搜索function
关键字。\s+\w+
,这个组用于标识函数的名称:可以定义一个没有名称的http://en.wikibooks.org/wiki/JavaScript/Anonymous_Functions,所以这个组必须是可选的。\s*\(
有一个任意数目的空格和一个括号来打开参数列表;[^,)]*
(不包含逗号或结束括号的字符序列)。\s*,\s*
模式强制执行的(\s*
实际上是不必要的)。接下来,一个参数名称的组,当然,我们需要跳过至少两个逗号。发布于 2015-05-12 20:41:38
只要想想“容易”:
(...)
:\(\)
,
:\(,{2,2}\)
,
都需要在前面加上字符串:\((?:\w+,\w+){2,2}\)
\((?:\w+,\w*){2,2}\w+\)
function name
:function\s+\w+\s*\((?:\w*,\w*){2,2}\)
开头function\s+\w+\s*\((?:\s*\w+\s*,\s*\w*\s*){2,2}\w+\s*\)
。这就对了。这应该涵盖所有“公共”方法声明,但无名lambda-表达式除外:
function\s+\w+\s*\((?:\s*\w+\s*,\s*\w*\s*){2,2}\w+\s*\)
匹配两个到两个逗号将找到带有3个参数的签名。Matchint 2到5个逗号将找到签名,包含3个最多6个参数。
发布于 2015-05-12 20:20:13
您可能希望使用function\s*\w+\s*\(\s*(\w+,?){3,10}
来匹配非匿名(命名)函数,并删除\w+\s*
以获取匿名函数的function\s*\(\s*(\w+,?){3,10}
。
可以将这些组合起来获得function\s*(?:\w+\s*)?\(\s*(\w+,?){3,10}
( ?:
是非捕获组)。
https://stackoverflow.com/questions/30200446
复制相似问题