簡體   English   中英

JavaScript正則表達式僅捕獲最后一次出現的組

[英]JavaScript regex captures only the last group occurrence

我正在嘗試解析文檔文本,其格式如下:

className : String
A text
colHeaders : Boolean (default false) 
colHeaders : Array [A, B, C, ...] 
colHeaders : Function function(index) { return ... }
Another text

這里有完整的文檔

因此,文檔中的每個選項都可以是多種類型,我想以編程方式恢復它們。 我創建了一個JavaScript正則表達式:

^(\w+) : (\w+)[^\n]*(?:\n\1 : (\w+)[^\n]*)*

Regex101演示頁面在這里

我成功地檢索了第一個選項類型(在上面的示例中為“ String”和“ Boolean”),但是就正則表達式的第二部分而言,我只能檢索最后一個組(“ Function”,我想兩者都“數組”和“功能”)。

如果刪除正則表達式末尾的“ *”量詞,則僅檢索“數組”(如果在其后添加非貪婪符號“?”,則是相同的事情),但我又想兩者都使用。 有沒有辦法在JS正則表達式中做到這一點?

“有沒有辦法在JS正則表達式中[訪問特定組的先前捕獲]?” -不

但是,您可以使用兩個正則表達式-一個捕獲塊的正則表達式:

/^(\w+) : .*(?:\n^\1.*)*/gm

還有一個將一個塊解析成幾行:

/^\w+ : (\w+)\s*(.*)/gm

var str = [
        'className : String',
        'A text',
        'colHeaders : Boolean (default false)',
        'colHeaders : Array [A, B, C, ...]',
        'colHeaders : Function function(index) { return ... }',
        'Another text'
    ].join("\n"),
    reBlock = /^(\w+) : .*(?:\n^\1.*)*/gm,
    reLine = /^\w+ : (\w+)\s*(.*)/gm,
    block, line;

while (block = reBlock.exec(str)) {
    console.log(block[1]);
    while (line = reLine.exec(block[0])) {
        console.log(" - ", line[1], line[2]);
    }
}

版畫

className
  -  String 
 colHeaders
  -  Boolean (default false)
  -  Array [A, B, C, ...]
  -  Function function(index) { return ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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