this Regex (\w*)\s*\([(\w*),]*\)
的目标是获取函数名称及其参数。
例如,给定f1 (11,22,33)
正则表达式应该捕获四个元素:
f1
11
22
33
这个正则表达式有什么问题?
答案 0 :(得分:1)
您可以使用split
执行此操作以下是javascript
var ar = str.match(/\((.*?)\)/);
if (ar) {
var result = ar[0].split(",");
}
答案 1 :(得分:0)
有些事情对正则表达很难: - )
正如上述评论者所说,“*”可能过于宽松。它意味着零或更多。所以foo(,,)
也匹配。不太好。
(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\)
这更接近你的想法。让我们打破它。
\w+ <-- The function name, has to have at least one character
\s* <-- zero or more whitespace
\( <-- parens to start the function call
(\w+) <-- at least one parameter
(?:) <-- this means not to save the matches
,\s* <-- a comma with optional space
(\w+) <-- another parameter
\s* <-- followed by optional space
这是Python的结果:
>>> m = re.match(r'(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\)', "foo(a,b,c)")
>>> m.groups()
('foo', 'a', 'c')
但是,这样的事情呢?
foo(a,b,c
d,e,f)
??是的,它正在用正则表达式加速,你继续使用更丰富的解析工具。