const regex = /^(?!(?!0* 0* 0*|0*+(?=(\d*?)((?:(?=\d+ 0*+(\d*?)(\d(?(4)\4)) 0*(\d*?)(\d\6?+)$)\d)+) )(?=(?(?!\1(?:(?=\d+ 0*\3((\7?+)\d))(?=\d(\d* 0*\3\8))(?=0\9[9]|1\9[8]|2\9[7]|3\9[6]|4\9[5]|5\9[4]|6\9[3]|7\9[2]|8\9[1]|9\9[0])\d)*+(?=\d(\d* 0*\3\8?+))(?=[5-9]\10[5-9]|1\10[9]|2\10[89]|3\10[7-9]|4\10[6-9]|6\10[4]|7\10[34]|8\10[2-4]|9\10[1-4]))(?=\d+ \d+ 0*\1\3\6$)|(?(?!.*+\3)\d+ )(?=\d*(\2|\4)( .*?0*+)\d+$)(?(?=9*\11 )(?:9(?=\d*\12[1](\13?+0)))*(?=\11 )\11\12[1]\13?+\6$|(?:(\d)(?=\d*\12(\15?+\14)))*(?=\d(\d*\12\15?+))(?=0\16[1]|1\16[2]|2\16[3]|3\16[4]|4\16[5]|5\16[6]|6\16[7]|7\16[8]|8\16[9])\d(?:9(?=\d*\12\15?+\d(\17?+0)))*?\11\s)))\1(?:(?=(\d)\d* 0*+\3((\19?+)\d)\d* 0*+\5((\21?+)\d))(?=\d(\d* 0*+\3\20)\d(\d* 0*+\5\22))(?(?!\18(?:(?=\d+ 0*+\3\19((\25?+)\d))(?=\d(\d* 0*+\3\19\26))(?=0\27[9]|1\27[8]|2\27[7]|3\27[6]|4\27[5]|5\27[4]|6\27[3]|7\27[2]|8\27[1]|9\27[0])\d)*+(?=\d(\d* 0*+\3\19\26?+))(?=[5-9]\28[5-9]|1\28[9]|2\28[89]|3\28[7-9]|4\28[6-9]|6\28[4]|7\28[34]|8\28[2-4]|9\28[1-4]))(?=1\23(?:1\24[2]|2\24[3]|3\24[4]|4\24[5]|5\24[6]|6\24[7]|7\24[8]|8\24[9]|9\24[0])|2\23(?:1\24[3]|2\24[4]|3\24[5]|4\24[6]|5\24[7]|6\24[8]|7\24[9]|8\24[0]|9\24[1])|3\23(?:1\24[4]|2\24[5]|3\24[6]|4\24[7]|5\24[8]|6\24[9]|7\24[0]|8\24[1]|9\24[2])|4\23(?:1\24[5]|2\24[6]|3\24[7]|4\24[8]|5\24[9]|6\24[0]|7\24[1]|8\24[2]|9\24[3])|5\23(?:1\24[6]|2\24[7]|3\24[8]|4\24[9]|5\24[0]|6\24[1]|7\24[2]|8\24[3]|9\24[4])|6\23(?:1\24[7]|2\24[8]|3\24[9]|4\24[0]|5\24[1]|6\24[2]|7\24[3]|8\24[4]|9\24[5])|7\23(?:1\24[8]|2\24[9]|3\24[0]|4\24[1]|5\24[2]|6\24[3]|7\24[4]|8\24[5]|9\24[6])|8\23(?:1\24[9]|2\24[0]|3\24[1]|4\24[2]|5\24[3]|6\24[4]|7\24[5]|8\24[6]|9\24[7])|9\23(?:1\24[0]|2\24[1]|3\24[2]|4\24[3]|5\24[4]|6\24[5]|7\24[6]|8\24[7]|9\24[8])|0\23(\d)\24\29|(\d)\23[0]\24\30)|(?=1\23(?:0\24[2]|1\24[3]|2\24[4]|3\24[5]|4\24[6]|5\24[7]|6\24[8]|7\24[9]|8\24[0]|9\24[1])|2\23(?:0\24[3]|1\24[4]|2\24[5]|3\24[6]|4\24[7]|5\24[8]|6\24[9]|7\24[0]|8\24[1]|9\24[2])|3\23(?:0\24[4]|1\24[5]|2\24[6]|3\24[7]|4\24[8]|5\24[9]|6\24[0]|7\24[1]|8\24[2]|9\24[3])|4\23(?:0\24[5]|1\24[6]|2\24[7]|3\24[8]|4\24[9]|5\24[0]|6\24[1]|7\24[2]|8\24[3]|9\24[4])|5\23(?:0\24[6]|1\24[7]|2\24[8]|3\24[9]|4\24[0]|5\24[1]|6\24[2]|7\24[3]|8\24[4]|9\24[5])|6\23(?:0\24[7]|1\24[8]|2\24[9]|3\24[0]|4\24[1]|5\24[2]|6\24[3]|7\24[4]|8\24[5]|9\24[6])|7\23(?:0\24[8]|1\24[9]|2\24[0]|3\24[1]|4\24[2]|5\24[3]|6\24[4]|7\24[5]|8\24[6]|9\24[7])|8\23(?:0\24[9]|1\24[0]|2\24[1]|3\24[2]|4\24[3]|5\24[4]|6\24[5]|7\24[6]|8\24[7]|9\24[8])|9\23(?:0\24[0]|1\24[1]|2\24[2]|3\24[3]|4\24[4]|5\24[5]|6\24[6]|7\24[7]|8\24[8]|9\24[9])|0\23(?:0\24[1]|1\24[2]|2\24[3]|3\24[4]|4\24[5]|5\24[6]|6\24[7]|7\24[8]|8\24[9]|9\24[0])))\d)+\s)).+/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(?!(?!0* 0* 0*|0*+(?=(\\d*?)((?:(?=\\d+ 0*+(\\d*?)(\\d(?(4)\\4)) 0*(\\d*?)(\\d\\6?+)$)\\d)+) )(?=(?(?!\\1(?:(?=\\d+ 0*\\3((\\7?+)\\d))(?=\\d(\\d* 0*\\3\\8))(?=0\\9[9]|1\\9[8]|2\\9[7]|3\\9[6]|4\\9[5]|5\\9[4]|6\\9[3]|7\\9[2]|8\\9[1]|9\\9[0])\\d)*+(?=\\d(\\d* 0*\\3\\8?+))(?=[5-9]\\10[5-9]|1\\10[9]|2\\10[89]|3\\10[7-9]|4\\10[6-9]|6\\10[4]|7\\10[34]|8\\10[2-4]|9\\10[1-4]))(?=\\d+ \\d+ 0*\\1\\3\\6$)|(?(?!.*+\\3)\\d+ )(?=\\d*(\\2|\\4)( .*?0*+)\\d+$)(?(?=9*\\11 )(?:9(?=\\d*\\12[1](\\13?+0)))*(?=\\11 )\\11\\12[1]\\13?+\\6$|(?:(\\d)(?=\\d*\\12(\\15?+\\14)))*(?=\\d(\\d*\\12\\15?+))(?=0\\16[1]|1\\16[2]|2\\16[3]|3\\16[4]|4\\16[5]|5\\16[6]|6\\16[7]|7\\16[8]|8\\16[9])\\d(?:9(?=\\d*\\12\\15?+\\d(\\17?+0)))*?\\11\\s)))\\1(?:(?=(\\d)\\d* 0*+\\3((\\19?+)\\d)\\d* 0*+\\5((\\21?+)\\d))(?=\\d(\\d* 0*+\\3\\20)\\d(\\d* 0*+\\5\\22))(?(?!\\18(?:(?=\\d+ 0*+\\3\\19((\\25?+)\\d))(?=\\d(\\d* 0*+\\3\\19\\26))(?=0\\27[9]|1\\27[8]|2\\27[7]|3\\27[6]|4\\27[5]|5\\27[4]|6\\27[3]|7\\27[2]|8\\27[1]|9\\27[0])\\d)*+(?=\\d(\\d* 0*+\\3\\19\\26?+))(?=[5-9]\\28[5-9]|1\\28[9]|2\\28[89]|3\\28[7-9]|4\\28[6-9]|6\\28[4]|7\\28[34]|8\\28[2-4]|9\\28[1-4]))(?=1\\23(?:1\\24[2]|2\\24[3]|3\\24[4]|4\\24[5]|5\\24[6]|6\\24[7]|7\\24[8]|8\\24[9]|9\\24[0])|2\\23(?:1\\24[3]|2\\24[4]|3\\24[5]|4\\24[6]|5\\24[7]|6\\24[8]|7\\24[9]|8\\24[0]|9\\24[1])|3\\23(?:1\\24[4]|2\\24[5]|3\\24[6]|4\\24[7]|5\\24[8]|6\\24[9]|7\\24[0]|8\\24[1]|9\\24[2])|4\\23(?:1\\24[5]|2\\24[6]|3\\24[7]|4\\24[8]|5\\24[9]|6\\24[0]|7\\24[1]|8\\24[2]|9\\24[3])|5\\23(?:1\\24[6]|2\\24[7]|3\\24[8]|4\\24[9]|5\\24[0]|6\\24[1]|7\\24[2]|8\\24[3]|9\\24[4])|6\\23(?:1\\24[7]|2\\24[8]|3\\24[9]|4\\24[0]|5\\24[1]|6\\24[2]|7\\24[3]|8\\24[4]|9\\24[5])|7\\23(?:1\\24[8]|2\\24[9]|3\\24[0]|4\\24[1]|5\\24[2]|6\\24[3]|7\\24[4]|8\\24[5]|9\\24[6])|8\\23(?:1\\24[9]|2\\24[0]|3\\24[1]|4\\24[2]|5\\24[3]|6\\24[4]|7\\24[5]|8\\24[6]|9\\24[7])|9\\23(?:1\\24[0]|2\\24[1]|3\\24[2]|4\\24[3]|5\\24[4]|6\\24[5]|7\\24[6]|8\\24[7]|9\\24[8])|0\\23(\\d)\\24\\29|(\\d)\\23[0]\\24\\30)|(?=1\\23(?:0\\24[2]|1\\24[3]|2\\24[4]|3\\24[5]|4\\24[6]|5\\24[7]|6\\24[8]|7\\24[9]|8\\24[0]|9\\24[1])|2\\23(?:0\\24[3]|1\\24[4]|2\\24[5]|3\\24[6]|4\\24[7]|5\\24[8]|6\\24[9]|7\\24[0]|8\\24[1]|9\\24[2])|3\\23(?:0\\24[4]|1\\24[5]|2\\24[6]|3\\24[7]|4\\24[8]|5\\24[9]|6\\24[0]|7\\24[1]|8\\24[2]|9\\24[3])|4\\23(?:0\\24[5]|1\\24[6]|2\\24[7]|3\\24[8]|4\\24[9]|5\\24[0]|6\\24[1]|7\\24[2]|8\\24[3]|9\\24[4])|5\\23(?:0\\24[6]|1\\24[7]|2\\24[8]|3\\24[9]|4\\24[0]|5\\24[1]|6\\24[2]|7\\24[3]|8\\24[4]|9\\24[5])|6\\23(?:0\\24[7]|1\\24[8]|2\\24[9]|3\\24[0]|4\\24[1]|5\\24[2]|6\\24[3]|7\\24[4]|8\\24[5]|9\\24[6])|7\\23(?:0\\24[8]|1\\24[9]|2\\24[0]|3\\24[1]|4\\24[2]|5\\24[3]|6\\24[4]|7\\24[5]|8\\24[6]|9\\24[7])|8\\23(?:0\\24[9]|1\\24[0]|2\\24[1]|3\\24[2]|4\\24[3]|5\\24[4]|6\\24[5]|7\\24[6]|8\\24[7]|9\\24[8])|9\\23(?:0\\24[0]|1\\24[1]|2\\24[2]|3\\24[3]|4\\24[4]|5\\24[5]|6\\24[6]|7\\24[7]|8\\24[8]|9\\24[9])|0\\23(?:0\\24[1]|1\\24[2]|2\\24[3]|3\\24[4]|4\\24[5]|5\\24[6]|6\\24[7]|7\\24[8]|8\\24[9]|9\\24[0])))\\d)+\\s)).+', 'gm')
const str = `0 1 2
10 20 1000
10 20 30
28657 46368 75025
0 0 0
8235 49 8284
4 145 149
4705 485 5191
821 75 897
74 497 572
1917 27 1944
89124 3 89128
6858 8669 15527
84916 4 84921
935 63 999
1 9 11
7203 26154 33358
2 765 767
267 8031 8298
2062 188 2251
38 7869 7907
59 85041 85101
705 220 926
71982 2346 74328
9 1 11
3 8117 8120
720 208 928
4 83 88
109 21854 21964
35019 44355 79375
7 9 17
2126 752 2879
2268 53 2321
9 37717 37726
5 949 954`;
// 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