const regex = /(no)|
(yes)(?!.*yes)|
((?!(?=(?<a>[\s\S]*))(?<b>yes.*(?=\k<a>\z)|(?<=(?=x^|(?&b))[\s\S])))yes)/mg;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(no)|
(yes)(?!.*yes)|
((?!(?=(?<a>[\\s\\S]*))(?<b>yes.*(?=\\k<a>\\z)|(?<=(?=x^|(?&b))[\\s\\S])))yes)', 'mg')
const str = `no/yes
no/yes/yes/no
/yes/yes/no/yes
no/word/no/yes/yes/yes/no
yes/no
yes/no/yes/word/yes
/word/yes/no/no/no/yes/yes
yes/no/yes/yes
`;
const subst = `${1:+-:+}`;
// 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