我试图使用正则表达式将函数定义中的参数提取到数组中。例如
func(a) -> ['a']
func(a,b) -> ['a','b']
func(a, b) -> ['a','b']
下面的正则表达式正确匹配参数块
/\((?:(\w+),?\s*)+\)/
但是,仅返回最后匹配的捕获组,即结果为:
func(a) -> ['a']
func(a,b) -> ['b']
func(a,b,c) -> ['c']
这似乎是用于捕获重复单元的一部分的通常有用的模式。有没有办法正确达到预期的结果?
我可以找到我保存的regexr会话here
答案 0 :(得分:0)
你可以得到这样的论点:
var s = "func(a, b, c )";
var res = s.substring(s.indexOf("(") + 1, s.indexOf(")")).split(/\s*,\s*/g);
alert(res);
如果你有像样本输入那样的独立字符串,这将有效。
我尝试添加的另一种方法是使用/\(([^()]+)\)/
正则表达式提取括号内组,然后将捕获的第1组内容与.split(/\s*,\s*/g)
分开。
答案 1 :(得分:0)
正则表达式/\((\w+(?:,\s?\w+)?)\)/
将为a, b
返回func(a, b)
,为a,b,c
返回func(a,b,c)
希望这是您想要的,取决于您执行此操作的语言,您可以简单地按每个,
拆分它们,以便将它们放入数组中以便稍后进行索引。