javascript - 匹配函数参数

标签 javascript regex

我一直在尝试创建一个匹配函数参数的正则表达式。

这是完整的示例(带有 Debug模式):https://regex101.com/r/vM7xN1/1

我目前拥有的正则表达式是这样的: \(([^,\s\)]+)(?:\s*,\s*([^,\s\)]+)) *\)

以及我想要达到的比赛结果:

1. someFunc(param) => ['param']

2. someFunc(param, param2) => ['param', 'param2']

3. someFunc(param, param2, param3) => ['param', 'param2', 'param3']

4. someFunc(param, param2, param3, param4) => ['param', 'param2', 'param3', 'param4']

由于某种原因,这仅正确匹配 1、2 个函数。在函数 3 和 4 中,它只会匹配第一个参数和最后一个参数。

为什么它会跳过第一个和最后一个之间的参数?

编辑: 附加测试:

'myFunction(param1, param2, param3)'.match(/(([^,\s)]+)(?:\s*,\s*([^,\s)]+))*)/) => ["(param1, param2, param3)", "param1", "param3"]

当尝试没有非捕获组时,我得到这个:

'myFunction(param1, param2, param3)'.match(/(([^,\s)]+)(\s*,\s*([^,\s)]+))*)/) => ["(param1, param2, param3)", "param1", ", param3", "param3"]

任何帮助都会很棒。

谢谢!

最佳答案

只需使用一个简单的正则表达式即可获取圆括号之间的所有内容并以逗号分隔:

>"someFunc(param, param2, param3, param4)".match(/(?:\()(.+)+(?:\))/)
["(param, param2, param3, param4)", "param, param2, param3, param4"]
>"someFunc(param, param2, param3, param4)".match(/(?:\()(.+)+(?:\))/)[1].split(/[\s,]+/)
["param", "param2", "param3", "param4"]

编辑:
我们还可以过滤掉空元素(如果有),如下所示:

>"someFunc( param , param2 , param3 )".match(/(?:\()(.+)+(?:\))/)[1].split(/[\s,]+/)
["", "param", "param2", "param3", ""]
>"someFunc( param , param2 , param3 )".match(/(?:\()(.+)+(?:\))/)[1].split(/[\s,]+/).filter(function(e){return e})
["param", "param2", "param3"]

关于javascript - 匹配函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195182/

相关文章:

javascript - 如何在 JavaScript 中通过正则表达式分割字符串?

javascript - 将对象列表 c# 传递给 javascript 时出错 : undefined variable

javascript - 当我设置这些时,为什么我的表单不进行验证检查?

javascript - Node js - 为什么 lstatSync(Path) 返回 undefined ? - 同步检查

ruby - 在 Ruby 中的字母和数字之间插入空格

ruby - 如何为字母、元音和辅音等德语字符类编写正则表达式?

java - 正则表达式匹配文件扩展名

javascript - if else 比较数组和字符串

javascript - NodeJS 在运行 Handlebars 时出现 Cannot find module './parser' 错误

ruby-on-rails - 创建一个给定字符串 (fname lname) 的方法返回两个