如何使用正则表达式读取括号内的所有字符串

问题描述:

我想获取括号内的所有字符串。例如,应用正则表达式后如何使用正则表达式读取括号内的所有字符串

"fun('xyz'); fun('abcd'); fun('abcd.ef') { temp('no'); " 

输出应该

['xyz','abcd', 'abcd.ef']. 

我试过很多选项,但没能得到期望的结果。 一个选项是
/fun\((.*?)\)/gi.exec("fun('xyz'); fun('abcd'); fun('abcd.ef')")

+1

那么,当你已经有了答案时,你为什么问这里? http://www.rubular.com/r/rWMUMS8a36 – mellamokb 2012-07-30 20:58:40

商店正则表达式中的变量,并在循环中运行它...

var re = /fun\((.*?)\)/gi, 
    string = "fun('xyz'); fun('abcd'); fun('abcd.ef')", 
    matches = [], 
    match; 

while(match = re.exec(string)) 
    matches.push(match[1]); 

请注意,这仅适用于全球正则表达式。如果您省略g,则会产生无限循环。

另请注意,如果在引号之间存在),它会给出不希望的结果。

您可以使用此代码几乎做的工作:

"fun('xyz'); fun('abcd'); fun('abcd.ef')".match(/'.*?'/gi); 

你会得到["'xyz'", "'abcd'", "'abcd.ef'"]包含额外'串绕。

找到你所需要的最简单的方法就是使用这个正则表达式:/[\w.]+(?=')/g

var string = "fun('xyz'); fun('abcd'); fun('abcd.ef')"; 
string.match(/[\w.]+(?=')/g); // ['xyz','abcd', 'abcd.ef'] 

它将与字母数字字符和点工作,你将需要改变[\w.]+添加更多的符号。