const regex = /# Time.
(?<=\|) (?:\s+ [^(]? )
([0-2][0-9]) (?:\s*) (:) \s* ([0-5][0-9]) (?:\s*)
(-)? (?: (?:\s*) ([0-2][0-9]) (?:\s*) (:) (?:\s*) ([0-5][0-9]) )?
(?= [^\)]? \s+ \|)
|
# Total.
(?<=\| ) (?:\s+) (\d+[m]) (?=\s+\|)/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('# Time.
(?<=\\|) (?:\\s+ [^(]? )
([0-2][0-9]) (?:\\s*) (:) \\s* ([0-5][0-9]) (?:\\s*)
(-)? (?: (?:\\s*) ([0-2][0-9]) (?:\\s*) (:) (?:\\s*) ([0-5][0-9]) )?
(?= [^\\)]? \\s+ \\|)
|
# Total.
(?<=\\| ) (?:\\s+) (\\d+[m]) (?=\\s+\\|)', 'gm')
const str = `# Todo
| Tracker | Task | Backlog |
| ----------: | :------------- | :------------ |
| 00:00-00:00 | [x] Task one | [[wiki.link |
| 00:00-00:00 | | |
| 00:00-00:00 | | |
| 00:00- | | |
| | | |
| 10m | | |
| | | |
| 00:00 | [<] Task two | [[wiki.link]] |
| | [<] Task three | [[wiki.link]] |
| (00:00) | [<] Task two | [[wiki.link]] |
| 00:00) | [<] Task two | [[wiki.link]] |
Time outside the table 00:00 that must not be selected.
Group 1: \`00\` (timer.start.hour)
Group 2: \`:\` (timer.start.colon)
Group 3: \`00\` (timer.start.minute)
Group 4: \`-\` (timer.separator)
Group 5: \`00\` (timer.end.hour)
Group 6: \`:\` (timer.end.colon)
Group 7: \`00\` (timer.end.minute)
Group 8: \`00\` (timer.total)
# Alternative
# Time (not supported by VS Code).
#(?=
# \\| \\s+ .*?
# ([0-2][0-9]) \\s* (:) \\s* ([0-5][0-9])
# (?:
# \\s* (-) \\s*
# ([0-2][0-9]) \\s* (:) \\s* ([0-5][0-9])
# )?
# .*? \\s+ \\|
#)
#|
# Total not supported by VS Code).
#(?= \\| \\s+ (\\dm) \\s+ \\| )`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions