const regex = /(\$[^\n$]*[^\s$])(-|=|\+)([^\s$][^\n$]*\$)/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(\\$[^\\n$]*[^\\s$])(-|=|\\+)([^\\s$][^\\n$]*\\$)', 'g')
const str = `\\end{theorem}
A \$k\$-periodic sequence has the property that \$s_i = s_{i + k}\$ for all \$i = 0,1,\\dots\$.
Thus a \$k\$-periodic sequence \$(s_i)_{i = 0}^\\infty\$ may be represented by any finite sequence \$(s_i)_{i=a}^{a+k - 1}\$, where \$a\$ is usually chosen to be \$0\$.
Sadly our Fibonacci sequence examples are not defined over a finite field but over the naturals and thus are not necessarily periodic.
Examples such as these may be interpreted to have a period of \$\\infty\$.
The period and related stability of linear recurrence sequences in regard to linear complexity has a very rich and broadly studied background~\\cite{DingZiaoShan1991}.
\\begin{theorem}
\\label{th: max period is m-sequence}
\\cite[Theorem~6.33]{LidlNiederreiter1994}
A linear recurrence sequence \$s\$ over a finite field \$\\gf_2\$ with linear complexity \$n\$ has a maximum possible period of \$2^n-1\$.
\\end{theorem}
\\begin{definition}
\\label{de: m-sequence}
A sequence which has maximum period for giv`;
// 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