簡體   English   中英

在RegEx中獲取組的多個匹配項

[英]Getting multiple matches for a group in RegEx

請考慮以下字符串method<arg1,arg2,arg3>

我想使用RegEx從這個字符串中獲取部分method arg1arg2arg3

以下正則表達式/([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方法只返回methodarg3部分。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM