首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于解析函数的正则表达式及其括号中的可选参数

用于解析函数的正则表达式及其括号中的可选参数
EN

Stack Overflow用户
提问于 2022-04-14 01:49:11
回答 2查看 53关注 0票数 0

我很快就能按我想要的方式完成这个任务了。我的准则是:

代码语言:javascript
复制
const text = 'func0 func-1(1)    func-2(1, 2) func3';
const matches = text.matchAll(\s*([^(]*)(?:\(([^\)]+)\))?)

我需要将其解析为多个组,其中组1是函数名(ex func0),组2是存在的参数。不需要参数和括号。

这个例子应该给出匹配的内容:

代码语言:javascript
复制
Match 0: 'func0'
Group 0: 'func0'
Group 1: ''

Match 0: 'func1'
Group 0: 'func1'
Group 1: '1'

Match 0: 'func2'
Group 0: 'func2'
Group 1: '1, 2'

Match 0: 'func3'
Group 0: 'func3'
Group 1: ''

目前,我的regexp只在所有函数都有params和/或最后一个无论证函数的情况下才能工作,而且它可以是唯一的。

我的问题是,如何允许字符串中任何函数的参数都是可选的。我需要检查是否在括号前找到一个空格,如果是,则检查匹配组。

下面是一个示例regex:https://regexr.com/6jiv2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-14 04:09:10

我稍微修改了您的正则表达式如下:\s*(?<fname>[^ (]+)(?:\((?<args>[^\)]+)\))?

在此测试:

这样,您就可以使用命名组分别访问函数名和参数。

以下是匹配,group1(fname)和group2(args):

代码语言:javascript
复制
Match 0: 'func0'
fname: 'func0'
args: ''

Match 0: 'func1'
fname: 'func1'
args: '1'

Match 0: 'func2'
fname: 'func2'
args: '1, 2'

Match 0: 'func3'
fname: 'func3'
args: ''
票数 1
EN

Stack Overflow用户

发布于 2022-04-14 05:06:01

我想这是你要找的东西。唯一的实质区别是,对于没有参数的函数,"Group 1“返回的是null而不是''

代码语言:javascript
复制
const text = "func0 func-1(1)    func-2(1, 2) func3";
const matches = [...text.matchAll(/([^ \(]+)(?:\(([^\)]+)\))?/g)];
console.log(JSON.stringify(matches));

// [["func0","func0",null],["func-1(1)","func-1","1"],["func-2(1, 2)","func-2","1, 2"],["func3","func3",null]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71865590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档