const regex = /((\b\d+)(?:\sPI?N ?#? ?))|((?:PI?N ?#? ?)(\d+))/gmi;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('((\\b\\d+)(?:\\sPI?N ?#? ?))|((?:PI?N ?#? ?)(\\d+))', 'gmi')
const str = `9999XX00999X PIN # 999999
9999XX000999 - PIN#909999
XXXXX XX PIN #9099999
9999XX99X PIN999099
99XX999X PN 9999999
9999999 PIN
90PA999 PN 999999
999009 PIN#
99PA99 PN#9999999
PIN 999990
XXXPIN990999
PIN#999099
PIN# 9990909
PIN#9099999*`;
const subst = `test\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