我很快就能按我想要的方式完成这个任务了。我的准则是:
const text = 'func0 func-1(1) func-2(1, 2) func3';
const matches = text.matchAll(\s*([^(]*)(?:\(([^\)]+)\))?)我需要将其解析为多个组,其中组1是函数名(ex func0),组2是存在的参数。不需要参数和括号。
这个例子应该给出匹配的内容:
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
发布于 2022-04-14 04:09:10
我稍微修改了您的正则表达式如下:\s*(?<fname>[^ (]+)(?:\((?<args>[^\)]+)\))?
在此测试:
这样,您就可以使用命名组分别访问函数名和参数。
以下是匹配,group1(fname)和group2(args):
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: ''发布于 2022-04-14 05:06:01
我想这是你要找的东西。唯一的实质区别是,对于没有参数的函数,"Group 1“返回的是null而不是''。
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]]https://stackoverflow.com/questions/71865590
复制相似问题