Javascript 将字符串转换为带参数的函数

Javascript 将字符串转换为带参数的函数,javascript,regex,Javascript,Regex,我正在努力写一个正则表达式来转换字符串 "fetchSomething('param1','param2','param3')" 进入正确的函数调用。我可以使用一些拆分和子字符串,但出于效率考虑(以及我自己的教育),我更愿意使用.match使用捕获组 但是当我使用 'something("stuff","moreStuff","yetMoreStuff")'.match(/(?:\(|,)("?\w+"?)/g) 我明白了 ["("stuff"", ","moreStuff"", ","

我正在努力写一个正则表达式来转换字符串

"fetchSomething('param1','param2','param3')" 
进入正确的函数调用。我可以使用一些拆分和子字符串,但出于效率考虑(以及我自己的教育),我更愿意使用
.match
使用捕获组

但是当我使用

'something("stuff","moreStuff","yetMoreStuff")'.match(/(?:\(|,)("?\w+"?)/g) 
我明白了

["("stuff"", ","moreStuff"", ","yetMoreStuff""]

无论
?:
,结果都是一样的,这让我很困惑,因为我认为
?:
会导致它忽略第一个捕获组?还是我完全不理解捕获组?

当激活
g
标志时,您将获得整个字符串。如果只在子匹配后执行,则需要使用
.exec
和循环:

var regex = /(?:\(|,)("?\w+"?)/g;
var s = 'something("stuff","moreStuff","yetMoreStuff")';
var match, matches=[];

while ( (match=regex.exec(s)) !== null ) {
    matches.push(match[1]);
}

alert(matches);

我建议使用实际的JS语法分析器,例如。或者,根据输入的来源和整个上下文,
eval
?FWIW呢?如果使用
.match
g
修饰符,数组只返回整个匹配,而不返回捕获组。你可能想看看,我很遗憾地受到我们现有库的限制。我们正在使用extJS。我还将此视为理解正则表达式的练习。谢谢,我甚至没有想到查看exec。这将失败于
“fetchSomething('param1','param2','param3')”
,这是问题中的第一个示例。如果要分析的表达式中的任何参数包含转义双引号、逗号或开括号,则此操作将失败。费利克斯·金(Felix King)在这个问题上的评论是对的。@Louis我本来以为OP会这样说,并相应地改变正则表达式,但他们没有。如果你想得到一个正则表达式,根据你指出的问题,它不那么容易崩溃,你可以使用类似的东西。OP的目标是得到更多的练习,他们的图书馆有限。他们的问题是否应该因此而被忽视?