我有一个字符串被输入到 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']
这基本上是搜索一个单词字符组,然后进行负向和正向前瞻。
基本上
(?!.*\()
说我希望它不在任何数量的字符前加一个 ( 字符和
(?=.*\))
说我希望它位于任意数量的字符和 ) 字符之前。
然后捕获组在开头,所以如果你想保留引号(我认为你不会这样做),你可以用 ([\'\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
编辑2:
最后一点,如果你真的想在整个过程中添加一堆空格,你可以这样做:
包括多个空格,多次:Regex101 Link
/([\w]+[\s\w]+[\w]+|\w+)(?!.*\()(?=.*\))/g
关于用于捕获圆括号中变量的 Javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712368/