我有一个字符串被输入到JavaScript函数中,我需要从中取出变量。
var str = "heres:a:func('var1', 'var2', 'var3', 2)"
我越来越近了,但是想用一个正则表达式来做。
str.match(/\((.*)\)/)[1].split(/\s*,\s*/)
结果应如下所示:
['var1', 'var2', 'var3', 2]
这是一种实现方法:
顺便说一下,这不包括引号,您可以根据需要添加这些引号。
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链接
包含多个空格:Regex101链接
Edit2:
最后,如果您真的想在整个过程中添加一堆空格,则可以执行以下操作:
包含多个空间,多次:Regex101链接
/([\w]+[\s\w]+[\w]+|\w+)(?!.*\()(?=.*\))/g
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句