使用正则表达式提取参数

时间:2015-07-30 10:16:47

标签: javascript regex

我试图使用正则表达式将函数定义中的参数提取到数组中。例如

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

2 个答案:

答案 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)

希望这是您想要的,取决于您执行此操作的语言,您可以简单地按每个,拆分它们,以便将它们放入数组中以便稍后进行索引。