在javascript正则表达式中返回多个元素

时间:2016-03-08 04:48:22

标签: javascript regex

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),而不是返回整个字符串。这个正则表达式有什么问题?

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意味着在循环中使用,因为它仍将检索所有匹配的子表达式。在您的代码中,您只能获得第一场比赛。

工作JSBin:https://jsbin.com/raquku/edit?js,console

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

Demo



console.log("func1 (1, 2) + func2 (3, 4)".match(/(\w+\s*\(.*?\))/g));