用于捕获曲线括号中变量的Javascript正则表达式
我有一个字符串被输入到JavaScript函数中,我需要从中提取变量用于捕获曲线括号中变量的Javascript正则表达式,javascript,regex,Javascript,Regex,我有一个字符串被输入到JavaScript函数中,我需要从中提取变量 var str = "heres:a:func('var1', 'var2', 'var3', 2)" 我快到了,但我想用一个正则表达式 str.match(/\((.*)\)/)[1].split(/\s*,\s*/) 结果应如下所示: ['var1', 'var2', 'var3', 2] var pattern = /([\w]+\s[\w]+|\w+)(?!.*\()(?=.*\))/g 您可以用一行来完成,但
var str = "heres:a:func('var1', 'var2', 'var3', 2)"
我快到了,但我想用一个正则表达式
str.match(/\((.*)\)/)[1].split(/\s*,\s*/)
结果应如下所示:
['var1', 'var2', 'var3', 2]
var pattern = /([\w]+\s[\w]+|\w+)(?!.*\()(?=.*\))/g
您可以用一行来完成,但仍然有两个regexp:1)删除开头的所有
(
和结尾的)
,然后在逗号上用可选的空格分隔。这样我们就可以得到所有的var
s,不管变量有多少
var str=“heres:a:func('var1','var2','var3',2)”;
警报(str.replace(/.*\(|\s*\)\s*$/g',).split(/\s*,\s*/)代码>因为我不能添加评论,所以我发布了一个答案。
var str=“heres:a:func('var1','var2','var3',2)”
变量args=/\(\s*([^)]+?)\s*\)/.exec(str);
if(args[1]){
args=args[1]。拆分(/\s*,\s*/);
console.log(args);
警报(args);
}
这应该可以在单引号或(
)数字无引号值之间捕获单词(\w
=字母数字和连字符)
请看演示
对于代码示例:
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)提供:
这里有一种方法: 顺便说一句,这不包括引号,您可以根据需要添加引号
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+)(我认为您是不对的)
编辑:要在字符串中包含空格,可以执行以下操作:
['var1', 'var2', 'var3', 2]
var pattern = /([\w]+\s[\w]+|\w+)(?!.*\()(?=.*\))/g
但这不会捕获尾随空格,只会捕获由两种单词类型(a-Z0-1)包围的空格。此外,这将只允许字中有1个空格,因此如果您需要倍数,您也必须检查它。您可以对其进行修改,以检查任意数量的单词字符或两个有效单词字符之间的空格
对于多个空间:
var pattern = /([\w]+[\s\w]*[\w]+|\w+)(?!.*\()(?=.*\))/g
包括1个空格:
包括多个空间:
Edit2:最后,如果你真的想在整个过程中添加一堆空格,你可以这样做: 包括多个空格,多次:
只用两个有什么问题?你有时间检查我的方法吗?实际上,我怀疑单一的正则表达式解决方案在JavaScript中是否可行。它的正则表达式引擎的功能非常差:(@Tensibai:如果有空格或加号或减号怎么办?你的正则表达式将不匹配特殊字符、Unicode字母等。只需在类的左侧添加允许的字符,如[\w_@$欧元%+~&]+而不是仅\w+,它就可以了。如果你真的想允许除单个引号外的所有引号(var的结尾)使用负类[^']+要匹配除单引号外的任何内容,您不能确定自己是否在一个开始和结束括号内,因为在JS中没有\G运算符。是的,但阻塞部分是缺少lookback,而不是\G。无论如何,如果您确实想确保括号,可以通过在函数回调中使用两个参数(如