用于捕获圆括号中变量的 Javascript 正则表达式

标签 javascript regex

我有一个字符串被输入到 JavaScript 函数中,我需要从中提取变量。

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

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

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

结果应该是这样的:

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

最佳答案

这是一种方法:

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']

这基本上是搜索一个单词字符组,然后进行负向和正向前瞻。
基本上

(?!.*\() 

说我希望它不在任何数量的字符前加一个 ( 字符和

(?=.*\)) 

说我希望它位于任意数量的字符和 ) 字符之前。

然后捕获组在开头,所以如果你想保留引号(我认为你不会这样做),你可以用 ([\'\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/

相关文章:

javascript - 是否有与 MooTools 的 set() 等效的 jQuery?

javascript - 网站javascript创建GWT 404错误

python - 如何避免匹配较长的字符串而选择较短的子字符串?

regex - 包含一个单词但不包含另一个单词的字符串的正则表达式

javascript - JQuery :has(), 我需要只选择 child

javascript - 提取数据后制表符添加 "numrow"

javascript - <video>.currentTIme 不想被设置

php - 从末尾开始匹配的正则表达式

仅 JavaScript 正则表达式 URL 提取域

c++ - 当正则表达式匹配重叠时会发生什么?