const regex = /;;\s*basic\sblock\s(\d+),\sloop\sdepth\s\d\s;;\s*pred:\s*\w*\s;;\s*starting\sat\sline\s(\d+)/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp(';;\\s*basic\\sblock\\s(\\d+),\\sloop\\sdepth\\s\\d\\s;;\\s*pred:\\s*\\w*\\s;;\\s*starting\\sat\\sline\\s(\\d+)', 'g')
const str = `
;; Function main (main, funcdef_no=13, decl_uid=3054, cgraph_uid=13, symbol_order=13)
Removing basic block 7
Merging blocks 5 and 6
;; 1 loops found
;;
;; Loop 0
;; header 0, latch 1
;; depth 0, outer -1
;; nodes: 0 1 2 3 4 5 6
;; 2 succs { 3 4 }
;; 3 succs { 5 }
;; 4 succs { 5 }
;; 5 succs { 6 }
;; 6 succs { 1 }
main ()
{
int n;
int D.3061;
;; basic block 2, loop depth 0
;; pred: ENTRY
;; starting at line 7
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:7:4] __builtin_puts (&"Enter an integer"[0]);
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:8:4] scanf ([D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:8:10] "%d", [D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:8:4] &n);
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:10:12] n.0_1 = n;
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:10:12] n.1_2 = (unsigned int) n.0_1;
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:10:12] _3 = n.1_2 & 1;
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:10:7] if (_3 == 0)
goto <bb 3>; [0.00%]
else
goto <bb 4>; [0.00%]
;; succ: 3
;; 4
;; basic block 3, loop depth 0
;; pred: 2
;; starting at line 11
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:11:7] __builtin_puts (&"Even"[0]);
[0:0] goto <bb 5>; [0.00%]
;; succ: 5
;; basic block 4, loop depth 0
;; pred: 2
;; starting at line 13
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:13:7] __builtin_puts (&"Odd"[0]);
;; succ: 5
;; basic block 5, loop depth 0
;; pred: 3
;; 4
;; starting at line 15
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:15:11] D.3061 = 0;
n = {CLOBBER};
;; succ: 6
;; basic block 6, loop depth 0
;; pred: 5
;; starting at line -1, discriminator 1
<L4> [0.00%]:
return D.3061;
;; succ: EXIT
}
;; Function _GLOBAL__sub_I_00100_0_main (_GLOBAL__sub_I_00100_0_main, funcdef_no=14, decl_uid=3094, cgraph_uid=0, symbol_order=17)
;; 1 loops found
;;
;; Loop 0
;; header 0, latch 1
;; depth 0, outer -1
;; nodes: 0 1 2
;; 2 succs { 1 }
_GLOBAL__sub_I_00100_0_main ()
{
;; basic block 2, loop depth 0
;; pred: ENTRY
;; starting at line 16
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:16:1] __gcov_init ([D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:16:1] &*.LPBX0);
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:16:1] return;
;; succ: EXIT
}
;; Function _GLOBAL__sub_D_00100_1_main (_GLOBAL__sub_D_00100_1_main, funcdef_no=15, decl_uid=3097, cgraph_uid=1, symbol_order=18)
;; 1 loops found
;;
;; Loop 0
;; header 0, latch 1
;; depth 0, outer -1
;; nodes: 0 1 2
;; 2 succs { 1 }
_GLOBAL__sub_D_00100_1_main ()
{
;; basic block 2, loop depth 0
;; pred: ENTRY
;; starting at line 16
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:16:1] __gcov_exit ();
[D:\\Kuliah\\Semester8\\TA2\\TestObject\\EvenOdd\\evenodd.c:16:1] return;
;; succ: EXIT
}
`;
// 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