考虑以下字符串method<arg1,arg2,arg3>
我想使用RegEx从此字符串中获取method
,arg1
,arg2
,arg3
部分。
以下正则表达式/([a-z0-9]+)<(?:([a-z0-9]+),?)*>/i
将字符串作为整体匹配。
即,
var result = /([a-z0-9]+)<(?:([a-z0-9]+),?)*>/i.test('method<arg1,arg2,arg3>');
// result = true
但是,regEx.exec
方法仅返回method
,arg3
部分。
result = /([a-z0-9]+)<(?:([a-z0-9]+),?)*>/i.exec('method<arg1,arg2,arg3>');
// result is ["methodname<arg1,arg2,arg3>", "methodname", "arg3"]
// as opposed to
// ["methodname<arg1,arg2,arg3>", "methodname", "arg1", "arg2", "arg3"]
有没有办法获得小组的所有比赛?
注意:我问这是为了学习,我不想让JavaScript解决。
编辑: args的数量(arg1,arg2等)是任意的,在不同情况下可能会发生变化。
答案 0 :(得分:2)
你需要把它分成两个表达式,一个用于外部字符串,一个用于内部;但是,内部表达式可以简化为常规字符串拆分。
var str = 'method<arg1,arg2,arg3>',
outer_re = /(\w+)<([^>]*)>/g;
while ((match = outer_re.exec(str)) !== null) {
var fn = match[1],
args = match[2].split(',');
console.log(fn, args);
}
顺便说一句,这可以匹配多个方法出现,例如:
"method1<arg1> method2<arg1,arg2>"
如果没有必要,您可以锚定表达式:
/^([^<]+)<([^>]*)>$/;
答案 1 :(得分:1)
试试这个正则表达式
\b([^<]*)<([^,]*),([^,]*),([^>]*)>
被捕获的团体:
0: "method<arg1,arg2,arg3>"
1: "method"
2: "arg1"
3: "arg2"
4: "arg3"
\b([^<]*)<([^>]*)>
提取出名称和所有参数。
被捕获的团体:
0: "method<arg1,arg2,arg3>"
1: "method"
2: "arg1,arg2,arg3"
然后我只是将组2拆分为已知分隔符,
答案 2 :(得分:0)
以下内容可行:
input = "method<arg1,arg2,arg3>";
action = input.match (/^(\w*)\s*<\s*(.*)?\s*>$/);
action[2] = action[2].split (/\s*,\s*/); // array of args
;; processing method action[1] and arguments action[2] (an array)