Javascript Regex用于捕获弯曲括号中的变量

时间:2015-06-08 14:49:39

标签: javascript regex

我有一个字符串被送入JavaScript函数,我需要将变量拉出来。

var str = "heres:a:func('var1', 'var2', 'var3', 2)"

我越来越近了,但想用一个正则表达式来做。

str.match(/\((.*)\)/)[1].split(/\s*,\s*/)

结果应如下所示:

['var1', 'var2', 'var3', 2]

4 个答案:

答案 0 :(得分:1)

这应该('\w+'|\d+)它会在单引号或(\w)数字未引用的值之间捕获单词(| =字母数字和连字符)。

请参阅演示here

代码示例:

var str = "heres:a:func('var1', 'var2', 'var3', 2)"
var reg=new RegExp("('\\w+'|\\d+)", "g");
var i= 0;
var arr = [];
str.replace(reg,function(m,group) {arr[i++]=group})

console.log(arr)给出:

["'var1'", "'var2'", "'var3'", "2"]

答案 1 :(得分:1)

这是一种方法:

Regex101 Link

顺便说一下,这不包括引号,如果需要,可以选择添加引号。

var pattern = /(\w+)(?!.*\()(?=.*\))/g;
var str = "heres:a:func('var1', 'var2', 'var3', 2)";
var matches = str.match(pattern);
console.log(matches); //['var1','var2','var3','2']

这基本上会搜索单词字符组,然后做出消极和积极的预测 基本上

(?!.*\() 

说我希望这不会在任意数量的字符加上(字符和

之前)
(?=.*\)) 

说我想要在任意数量的角色和a)角色之前。

然后捕获组在开头,所以你可以用([\'\ w] +)替换(\ w +)如果你想保留引号(我认为你不对)

修改:要在字符串中包含空格,您可以执行以下操作:

var pattern = /([\w]+\s[\w]+|\w+)(?!.*\()(?=.*\))/g

但这不会捕获尾随的空白区域,只会占用2个字类型(a-Z0-1)所包围的空格。此外,只允许单词中有1个空格,所以如果你需要倍数,你也必须检查它。您可以修改它以检查2个有效单词字符之间的任意数量的单词字符或空格。

对于多个空格:

var pattern = /([\w]+[\s\w]*[\w]+|\w+)(?!.*\()(?=.*\))/g

包含1个空格:Regex101 Link

包含多个空格:Regex101 Link

<强> EDIT2:
就像最后一个,如果你真的想要在整个过程中添加一堆空格,你可以这样做:

包含多个空格,多次:Regex101 Link

/([\w]+[\s\w]+[\w]+|\w+)(?!.*\()(?=.*\))/g

答案 2 :(得分:0)

你可以使用一行,但仍然有2个正则表达式:1)删除所有直到开头(和结束),然后在带有可选空格的逗号上拆分。这样我们就可以获得所有var s,无论有多少变量。

&#13;
&#13;
var str = "heres:a:func('var1', 'var2', 'var3', 2)";
alert(str.replace(/.*\(|\s*\)\s*$/g, '').split(/\s*,\s*/));
&#13;
&#13;
&#13;

此外,您可能会尝试一种奇特的正则表达式,但它不安全(只有在数据格式正确的情况下才有效):

&#13;
&#13;
var re = /('[^']*?'|\b\d+\b),?(?=(?:(?:[^']*'){2})*[^']*\)$)/g; 
var str = 'heres:a:func23(\'var1\', \'var2\', \'var3\', 2, \'2345\')';
while ((m = re.exec(str)) !== null) {
    document.getElementById("res").innerHTML += m[1] + "<br/>";
}
 
&#13;
<div id="res"/>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

由于我无法添加评论,我发布了答案。

&#13;
&#13;
var str = "heres:a:func('var1', 'var2', 'var3', 2)"
var args = /\(\s*([^)]+?)\s*\)/.exec(str);
if (args[1]) {
   args = args[1].split(/\s*,\s*/);
   console.log(args);
   alert(args);
} 
&#13;
&#13;
&#13;

或者在这里尝试一下: https://jsfiddle.net/oz3Ljfe1/3/