const regex = /if\s*(\((?>[^()]|(?1))*\))(*SKIP)(*F)|(\w+)(\s*<=[^;]*)/gs;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('if\\s*(\\((?>[^()]|(?1))*\\))(*SKIP)(*F)|(\\w+)(\\s*<=[^;]*)', 'gs')
const str = `always @(posedge clk or negedge rst_n)
if(!rst_n)begin
d1 <= 0; //perl_comment_4
//perl_comment_5
d2 <= 1 //perl_comment_6
+ 2;
end
else if( d3 <= d4 && ( d5 <= 3 ) ) begin
d6 <= d7 +
(d8 <= d9 ? 1 : 0);
//perl_comment_7
d10 <= d11 <=
d12
+ d13
<= d14 ? 1 : 0;
end`;
const subst = `$2_yes$3`;
// 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