[英]Getting multiple matches for a group in RegEx
請考慮以下字符串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等)是任意的,可以在不同的情況下改變。
你需要將它分成兩個表達式,一個用於外部字符串,一個用於內部; 但是,內部表達式可以簡化為常規字符串拆分。
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>"
如果沒有必要,您可以錨定表達式:
/^([^<]+)<([^>]*)>$/;
試試這個正則表達式
\\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拆分為已知的分隔符,
以下將有效:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.