const regex = /(\w+|x_[^: ]*) ?:( ((?!x_|\()[^:() ]*|(?:(\d*[)( -])*\d+))?)? ?/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(\\w+|x_[^: ]*) ?:( ((?!x_|\\()[^:() ]*|(?:(\\d*[)( -])*\\d+))?)? ?', 'gm')
const str = `bypass_first_page : x_company : x_cust_id : 12345 x_customer_ip : x_customer_tax_id : x_description : 98765 x_duty : x_email_customer : an_example@example.com x_fax : x_footer_email_receipt : x_fp_hash : 747ffeddfe4e106a9c67363ebff996ad x_fp_timestamp : 1525100766 x_invoice_num : R000098765 x_login : MY-LOGIN-ID x_logo_url : x_merchant_email : x_method : x_phone : (416) 555-1212 x_po_num : x_receipt_link_method : GET x_reference_3 : 1234 x_relay_response : TRUE x_relay_url :`;
const subst = `[\1] => \2\n`;
// 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