const regex = /(?<=begin{DoxyCode})([\s\S]+?[^\\])([_%])([\s\S]+?)(?=end{DoxyCode})/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<=begin{DoxyCode})([\\s\\S]+?[^\\\\])([_%])([\\s\\S]+?)(?=end{DoxyCode})', 'g')
const str = `\\begin{DoxyCode}
17 This is some code that contains an_undersc_ore and
18 an escaped\\_underscore. Plus another unescaped_unders_core
19 for good measure.
20 As if that was not "bad" enough, it also contains a %percent sign
21 that is unescaped.
\\end{DoxyCode}
Here is some other stuff that may contain \\index{things_not_to_be_escaped}.
\\begin{DoxyCode}
17 This is some code that contains an_underscore and
18 an escaped\\_underscore. Plus another unescaped_underscore
19 for good measure.
20 As if that was not "bad" enough, it also contains a \\%percent sign
21 that is escaped.
\\end{DoxyCode}`;
// 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