const regex = new RegExp('(?:^ *(?:/\\*\\*[^/\\n]*\\r?\\n(?:[^/\\n]*\\r?\\n)*[^/\\n]*\\*/ *|//.*)\\r?\\n)+(?: *[\\r?\\n])*#ifdef BUILD_FLAG\\r?\\n[\\s\\S]*?^#endif\\r?\\n', 'gm')
const str = ` Code here
and here
//this is s comment block
/**
*and a nested comment block
*/
//-----------------------------------------------------------------------------
// this comment block should not be captured
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// this whole comment block and the conditional block below should be captured
//-----------------------------------------------------------------------------
/**
* @brief Some comment
*
xxxxx
* @return
*/
//-----------------------------------------------------------------------------
#ifdef BUILD_FLAG
...
#endif
More code
More code
//---------------------------------------------------------
// this whole comment block and the conditional block below should be captured
// --------------------------------------------------------
#ifdef BUILD_FLAG
...
#endif
More code
//-------------------------------------------------------------------------
/**
* @name this whole block comment should be captured.
* @{
*/
#ifdef BUILD_FLAG
...
#endif
`;
const subst = ``;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
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