In this jsfiddle我有一个应该从字符串返回函数的正则表达式。
var regex = /(\w+\s*\([^)]*\))/g
var array = regex.exec("func1 (1, 2) + func2 (3, 4)");
console.log(array)
array
变量应包含两个元素func1 (1, 2)
和func2 (3, 4)
,而不是返回整个字符串。这个正则表达式有什么问题?
答案 0 :(得分:0)
试试这个
var re = /(\w+\s*\([^)]+\))/g;
var str = 'func1 (1, 2) + func2 (3, 4)';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
alert(m[0])
// View your result using the m-variable.
// eg m[0] etc.
}
答案 1 :(得分:0)
在这里使用匹配而不是exec:
"func1 (1, 2) + func2 (3, 4)".match(/(\w+\s*\(.*?\))/g);
exec意味着在循环中使用,因为它仍将检索所有匹配的子表达式。在您的代码中,您只能获得第一场比赛。
答案 2 :(得分:0)
使用Regex101.com对生成的代码进行一些修改,
var re = /(\w+\s*\([^)]*\))/g;
var str = 'func2 (3, 4) + func1 (1, 2)';
var m;
var results = [];
var counter = 0;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
results[counter] = m[counter]
counter++;
}
console.log(results)
答案 3 :(得分:0)
RegExp#exec
一次返回一个匹配项。 To use exec
to get all the matches, it need to be used with while
loop.
var str = "func1 (1, 2) + func2 (3, 4)";
var regex = /(\w+\s*\(.*?\))/g;
while (match = regex.exec(str)) {
console.log(match[1]);
}

String#match
也可用于在单个语句中获取所有匹配项。
console.log("func1 (1, 2) + func2 (3, 4)".match(/(\w+\s*\(.*?\))/g));
console.log("func1 (1, 2) + func2 (3, 4)".match(/(\w+\s*\(.*?\))/g));