const regex = /(?|(?:\G(?!\A)(?<=\|)|^\|\h*\[x\]\h*\|)\h*\K([^|\n]+)(?<=\S)\h*\||\[x]\h*\K([^|\s!]+(?:\h*[^|\s]+)*))|
(?|(?:\G(?!\A)\||^\|\h*\[x]\h*!\h*\|)\h*\K([^|\n]+)(?<=\S)\h*|\[x]\h*!\h*\K([^|\s]+(?:\h*[^|\s]+)*))/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?|(?:\\G(?!\\A)(?<=\\|)|^\\|\\h*\\[x\\]\\h*\\|)\\h*\\K([^|\\n]+)(?<=\\S)\\h*\\||\\[x]\\h*\\K([^|\\s!]+(?:\\h*[^|\\s]+)*))|
(?|(?:\\G(?!\\A)\\||^\\|\\h*\\[x]\\h*!\\h*\\|)\\h*\\K([^|\\n]+)(?<=\\S)\\h*|\\[x]\\h*!\\h*\\K([^|\\s]+(?:\\h*[^|\\s]+)*))', 'gm')
const str = `Test cases where it should match.
- [x] Example task. | Task ends. [x] Another task.
- [x] ! Example task. | This ends. [x] ! Another task.
- [x] Example task! | Task ends. [x] Another task!
- [x] ! Example task! | This ends. [x] ! Another task!
This is a sentence. [x] Task is here.
Other text. Another [x] ! Task is here.
Must not match in the table.
| | Task name | Plan | Actual | File |
| :---- | :-------------| :---------: | :---------: | :------------: |
| [x] | Task example. | 08:00-08:45 | 08:00-09:00 | [[task-one]] |
| [x] ! | Task example. | 08:00-08:45 | 08:00-09:00 | [[task-one]] |
Groups expected:
\$1: all text after [x]
\$2: all text after [x] !
Regex for each group:
\$1: [^\\|\\s]\\s*\\[x\\]\\s*\\K[^!|\\n]*
\$2: [^\\|\\s]\\s*\\[x\\]\\s*\\!\\s*\\K[^|\\n]*
With the not-capturing group applied:
\$1: (?:[^\\|\\s]\\s*\\[x\\]\\s*\\K[^!|\\n]*)
\$2: (?:[^\\|\\s]\\s*\\[x\\]\\s*\\!\\s*\\K[^|\\n]*)
The combined expression:
(?:[^\\|\\s]\\s*\\[x\\]\\s*\\K([^!|\\n]*))|(?:[^\\|\\s]\\s*\\[x\\]\\s*\\!\\s*\\K([^|\\n]*))`;
// 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