[英]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.