我正在嘗試創建一個在降價檔案中查找文本的正則運算式。基本上,我的“任務”標有- [ ]or- [x]字符(未完成或已完成)和專案標題(標有##)。我想查找所有未完成的任務及其專案名稱。
例如,對于此示例文本:
# Top of File
## Project A
Descriptive line
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec finibus elit non nibh lobortis molestie.
- [ ] an undone task
- [x] a completed task
- [x] second completed task
## Project B
Descriptive line
- [x] a completed task
- [ ] an uncompleted task
## Project C
Descriptive line
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec finibus elit non nibh lobortis molestie.
- [x] completed task
- [ ] uncompleted task
- [x] completed task
我想回傳:
專案 A,未完成的
任務 專案 B,未完成的任務
專案 C,未完成的任務
這可能會接近,但我將有可變數量的任務,并且正則運算式想知道要向前看多少行,而且它太可變了。((.*(\n|\r|\r\n)){5})\- \[ \]
uj5u.com熱心網友回復:
我們可以嘗試使用match()here來替代查找專案或不完整的行。然后,進行歸約,以逗號分隔符組合兩條匹配的行。
var input = `# Top of File
## Project A
Descriptive line
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec finibus elit non nibh lobortis molestie.
- [ ] an undone task
- [x] a completed task
- [x] second completed task
## Project B
Descriptive line
- [x] a completed task
- [ ] an uncompleted task
## Project C
Descriptive line
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec finibus elit non nibh lobortis molestie.
- [x] completed task
- [ ] uncompleted task
- [x] completed task`;
var lines = input.match(/## (.*)|- \[ \] (.*)/g)
.map(x => x.match(/\w (?: \w )*/g)[0]);
var output = [];
var i=0;
while (i < lines.length) {
output.push(lines[i] ", " lines[i 1]);
i = 2;
}
console.log(output);
以下是用于查找匹配行的正則運算式模式的說明:
## (.*)匹配并捕獲專案文本|或者- \[ \] (.*)匹配并捕獲不完整的文本
但是該函式將回傳我們不想要match()的前導部分(例如)。##所以我添加了一個map()步驟來洗掉這個主要內容。最后,我們迭代行陣列并用逗號按順序組合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/527109.html
